AOMedia AV1 Codec
encoder.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2016, Alliance for Open Media. All rights reserved.
3 *
4 * This source code is subject to the terms of the BSD 2 Clause License and
5 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6 * was not distributed with this source code in the LICENSE file, you can
7 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
8 * Media Patent License 1.0 was not distributed with this source code in the
9 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
10 */
11
15#ifndef AOM_AV1_ENCODER_ENCODER_H_
16#define AOM_AV1_ENCODER_ENCODER_H_
17
18#include <stdbool.h>
19#include <stdio.h>
20
21#include "config/aom_config.h"
22
23#include "aom/aomcx.h"
24#include "aom_util/aom_pthread.h"
25
26#include "av1/common/alloccommon.h"
27#include "av1/common/av1_common_int.h"
28#include "av1/common/blockd.h"
29#include "av1/common/entropymode.h"
30#include "av1/common/enums.h"
31#include "av1/common/reconintra.h"
32#include "av1/common/resize.h"
33#include "av1/common/thread_common.h"
34#include "av1/common/timing.h"
35
36#include "av1/encoder/aq_cyclicrefresh.h"
37#include "av1/encoder/av1_quantize.h"
38#include "av1/encoder/block.h"
39#include "av1/encoder/context_tree.h"
40#include "av1/encoder/enc_enums.h"
41#include "av1/encoder/encodemb.h"
42#include "av1/encoder/external_partition.h"
43#include "av1/encoder/firstpass.h"
44#include "av1/encoder/global_motion.h"
45#include "av1/encoder/level.h"
47#include "av1/encoder/mcomp.h"
48#include "av1/encoder/pickcdef.h"
49#include "av1/encoder/ratectrl.h"
50#include "av1/encoder/rd.h"
52#include "av1/encoder/svc_layercontext.h"
53#include "av1/encoder/temporal_filter.h"
54#if CONFIG_THREE_PASS
55#include "av1/encoder/thirdpass.h"
56#endif
57#include "av1/encoder/tokenize.h"
58#include "av1/encoder/tpl_model.h"
59#include "av1/encoder/av1_noise_estimate.h"
60#include "av1/encoder/bitstream.h"
61
62#if CONFIG_INTERNAL_STATS
63#include "aom_dsp/ssim.h"
64#endif
65#include "aom_dsp/variance.h"
66#if CONFIG_DENOISE
67#include "aom_dsp/noise_model.h"
68#endif
69#if CONFIG_TUNE_VMAF
70#include "av1/encoder/tune_vmaf.h"
71#endif
72#if CONFIG_AV1_TEMPORAL_DENOISING
73#include "av1/encoder/av1_temporal_denoiser.h"
74#endif
75#if CONFIG_TUNE_BUTTERAUGLI
76#include "av1/encoder/tune_butteraugli.h"
77#endif
78
79#include "aom/internal/aom_codec_internal.h"
80
81#ifdef __cplusplus
82extern "C" {
83#endif
84
85// TODO(yunqing, any): Added suppression tag to quiet Doxygen warnings. Need to
86// adjust it while we work on documentation.
88// Number of frames required to test for scene cut detection
89#define SCENE_CUT_KEY_TEST_INTERVAL 16
90
91// Lookahead index threshold to enable temporal filtering for second arf.
92#define TF_LOOKAHEAD_IDX_THR 7
93
94#define HDR_QP_LEVELS 10
95#define CHROMA_CB_QP_SCALE 1.04
96#define CHROMA_CR_QP_SCALE 1.04
97#define CHROMA_QP_SCALE -0.46
98#define CHROMA_QP_OFFSET 9.26
99#define QP_SCALE_FACTOR 2.0
100#define DISABLE_HDR_LUMA_DELTAQ 1
101
102// Rational number with an int64 numerator
103// This structure holds a fractional value
104typedef struct aom_rational64 {
105 int64_t num; // fraction numerator
106 int den; // fraction denominator
107} aom_rational64_t; // alias for struct aom_rational
108
109enum {
110 // Good Quality Fast Encoding. The encoder balances quality with the amount of
111 // time it takes to encode the output. Speed setting controls how fast.
112 GOOD,
113 // Realtime Fast Encoding. Will force some restrictions on bitrate
114 // constraints.
115 REALTIME,
116 // All intra mode. All the frames are coded as intra frames.
117 ALLINTRA
118} UENUM1BYTE(MODE);
119
120enum {
121 FRAMEFLAGS_KEY = 1 << 0,
122 FRAMEFLAGS_GOLDEN = 1 << 1,
123 FRAMEFLAGS_BWDREF = 1 << 2,
124 // TODO(zoeliu): To determine whether a frame flag is needed for ALTREF2_FRAME
125 FRAMEFLAGS_ALTREF = 1 << 3,
126 FRAMEFLAGS_INTRAONLY = 1 << 4,
127 FRAMEFLAGS_SWITCH = 1 << 5,
128 FRAMEFLAGS_ERROR_RESILIENT = 1 << 6,
129} UENUM1BYTE(FRAMETYPE_FLAGS);
130
131#if CONFIG_FPMT_TEST
132enum {
133 PARALLEL_ENCODE = 0,
134 PARALLEL_SIMULATION_ENCODE,
135 NUM_FPMT_TEST_ENCODES
136} UENUM1BYTE(FPMT_TEST_ENC_CFG);
137#endif // CONFIG_FPMT_TEST
138// 0 level frames are sometimes used for rate control purposes, but for
139// reference mapping purposes, the minimum level should be 1.
140#define MIN_PYR_LEVEL 1
141static inline int get_true_pyr_level(int frame_level, int frame_order,
142 int max_layer_depth) {
143 if (frame_order == 0) {
144 // Keyframe case
145 return MIN_PYR_LEVEL;
146 } else if (frame_level == MAX_ARF_LAYERS) {
147 // Leaves
148 return max_layer_depth;
149 } else if (frame_level == (MAX_ARF_LAYERS + 1)) {
150 // Altrefs
151 return MIN_PYR_LEVEL;
152 }
153 return AOMMAX(MIN_PYR_LEVEL, frame_level);
154}
155
156enum {
157 NO_AQ = 0,
158 VARIANCE_AQ = 1,
159 COMPLEXITY_AQ = 2,
160 CYCLIC_REFRESH_AQ = 3,
161 AQ_MODE_COUNT // This should always be the last member of the enum
162} UENUM1BYTE(AQ_MODE);
163enum {
164 NO_DELTA_Q = 0,
165 DELTA_Q_OBJECTIVE = 1, // Modulation to improve objective quality
166 DELTA_Q_PERCEPTUAL = 2, // Modulation to improve video perceptual quality
167 DELTA_Q_PERCEPTUAL_AI = 3, // Perceptual quality opt for all intra mode
168 DELTA_Q_USER_RATING_BASED = 4, // User rating based delta q mode
169 DELTA_Q_HDR = 5, // QP adjustment based on HDR block pixel average
170 DELTA_Q_VARIANCE_BOOST =
171 6, // Variance Boost style modulation for all intra mode
172 DELTA_Q_MODE_COUNT // This should always be the last member of the enum
173} UENUM1BYTE(DELTAQ_MODE);
174
175enum {
176 RESIZE_NONE = 0, // No frame resizing allowed.
177 RESIZE_FIXED = 1, // All frames are coded at the specified scale.
178 RESIZE_RANDOM = 2, // All frames are coded at a random scale.
179 RESIZE_DYNAMIC = 3, // Frames coded at lower scale based on rate control.
180 RESIZE_MODES
181} UENUM1BYTE(RESIZE_MODE);
182
183enum {
184 SS_CFG_SRC = 0,
185 SS_CFG_LOOKAHEAD = 1,
186 SS_CFG_FPF = 2,
187 SS_CFG_TOTAL = 3
188} UENUM1BYTE(SS_CFG_OFFSET);
189
190enum {
191 DISABLE_SCENECUT, // For LAP, lag_in_frames < 19
192 ENABLE_SCENECUT_MODE_1, // For LAP, lag_in_frames >=19 and < 33
193 ENABLE_SCENECUT_MODE_2 // For twopass and LAP - lag_in_frames >=33
194} UENUM1BYTE(SCENECUT_MODE);
195
196#define MAX_VBR_CORPUS_COMPLEXITY 10000
197
198typedef enum {
199 MOD_FP, // First pass
200 MOD_TF, // Temporal filtering
201 MOD_TPL, // TPL
202 MOD_GME, // Global motion estimation
203 MOD_ENC, // Encode stage
204 MOD_LPF, // Deblocking loop filter
205 MOD_CDEF_SEARCH, // CDEF search
206 MOD_CDEF, // CDEF frame
207 MOD_LR, // Loop restoration filtering
208 MOD_PACK_BS, // Pack bitstream
209 MOD_FRAME_ENC, // Frame Parallel encode
210 MOD_AI, // All intra
211 NUM_MT_MODULES
212} MULTI_THREADED_MODULES;
213
215
229
240
245typedef enum {
246 SKIP_APPLY_RESTORATION = 1 << 0,
247 SKIP_APPLY_SUPERRES = 1 << 1,
248 SKIP_APPLY_CDEF = 1 << 2,
249 SKIP_APPLY_LOOPFILTER = 1 << 3,
251
255typedef struct {
259 RESIZE_MODE resize_mode;
270} ResizeCfg;
271
299
354
396
427
463
467typedef struct {
472
477
482
488
495
500
505
510
515
521
635
637typedef struct {
638 // Indicates the number of frames lag before encoding is started.
639 int lag_in_frames;
640 // Indicates the minimum gf/arf interval to be used.
641 int min_gf_interval;
642 // Indicates the maximum gf/arf interval to be used.
643 int max_gf_interval;
644 // Indicates the minimum height for GF group pyramid structure to be used.
645 int gf_min_pyr_height;
646 // Indicates the maximum height for GF group pyramid structure to be used.
647 int gf_max_pyr_height;
648 // Indicates if automatic set and use of altref frames should be enabled.
649 bool enable_auto_arf;
650 // Indicates if automatic set and use of (b)ackward (r)ef (f)rames should be
651 // enabled.
652 bool enable_auto_brf;
653} GFConfig;
654
655typedef struct {
656 // Indicates the number of tile groups.
657 unsigned int num_tile_groups;
658 // Indicates the MTU size for a tile group. If mtu is non-zero,
659 // num_tile_groups is set to DEFAULT_MAX_NUM_TG.
660 unsigned int mtu;
661 // Indicates the number of tile columns in log2.
662 int tile_columns;
663 // Indicates the number of tile rows in log2.
664 int tile_rows;
665 // Indicates the number of widths in the tile_widths[] array.
666 int tile_width_count;
667 // Indicates the number of heights in the tile_heights[] array.
668 int tile_height_count;
669 // Indicates the tile widths, and may be empty.
670 int tile_widths[MAX_TILE_COLS];
671 // Indicates the tile heights, and may be empty.
672 int tile_heights[MAX_TILE_ROWS];
673 // Indicates if large scale tile coding should be used.
674 bool enable_large_scale_tile;
675 // Indicates if single tile decoding mode should be enabled.
676 bool enable_single_tile_decoding;
677 // Indicates if EXT_TILE_DEBUG should be enabled.
678 bool enable_ext_tile_debug;
679} TileConfig;
680
681typedef struct {
682 // Indicates the width of the input frame.
683 int width;
684 // Indicates the height of the input frame.
685 int height;
686 // If forced_max_frame_width is non-zero then it is used to force the maximum
687 // frame width written in write_sequence_header().
688 int forced_max_frame_width;
689 // If forced_max_frame_width is non-zero then it is used to force the maximum
690 // frame height written in write_sequence_header().
691 int forced_max_frame_height;
692 // Indicates the frame width after applying both super-resolution and resize
693 // to the coded frame.
694 int render_width;
695 // Indicates the frame height after applying both super-resolution and resize
696 // to the coded frame.
697 int render_height;
698} FrameDimensionCfg;
699
700typedef struct {
701 // Indicates if warped motion should be enabled.
702 bool enable_warped_motion;
703 // Indicates if warped motion should be evaluated or not.
704 bool allow_warped_motion;
705 // Indicates if OBMC motion should be enabled.
706 bool enable_obmc;
707} MotionModeCfg;
708
709typedef struct {
710 // Timing info for each frame.
711 aom_timing_info_t timing_info;
712 // Indicates the number of time units of a decoding clock.
713 uint32_t num_units_in_decoding_tick;
714 // Indicates if decoder model information is present in the coded sequence
715 // header.
716 bool decoder_model_info_present_flag;
717 // Indicates if display model information is present in the coded sequence
718 // header.
719 bool display_model_info_present_flag;
720 // Indicates if timing info for each frame is present.
721 bool timing_info_present;
722} DecoderModelCfg;
723
724typedef struct {
725 // Indicates the update frequency for coeff costs.
726 COST_UPDATE_TYPE coeff;
727 // Indicates the update frequency for mode costs.
728 COST_UPDATE_TYPE mode;
729 // Indicates the update frequency for mv costs.
731 // Indicates the update frequency for dv costs.
733} CostUpdateFreq;
734
735typedef struct {
736 // Indicates the maximum number of reference frames allowed per frame.
737 unsigned int max_reference_frames;
738 // Indicates if the reduced set of references should be enabled.
739 bool enable_reduced_reference_set;
740 // Indicates if one-sided compound should be enabled.
741 bool enable_onesided_comp;
742} RefFrameCfg;
743
744typedef struct {
745 // Indicates the color space that should be used.
746 aom_color_primaries_t color_primaries;
747 // Indicates the characteristics of transfer function to be used.
748 aom_transfer_characteristics_t transfer_characteristics;
749 // Indicates the matrix coefficients to be used for the transfer function.
750 aom_matrix_coefficients_t matrix_coefficients;
751 // Indicates the chroma 4:2:0 sample position info.
752 aom_chroma_sample_position_t chroma_sample_position;
753 // Indicates if a limited color range or full color range should be used.
754 aom_color_range_t color_range;
755} ColorCfg;
756
757typedef struct {
758 // Indicates if extreme motion vector unit test should be enabled or not.
759 unsigned int motion_vector_unit_test;
760 // Indicates if superblock multipass unit test should be enabled or not.
761 unsigned int sb_multipass_unit_test;
762} UnitTestCfg;
763
764typedef struct {
765 // Indicates the file path to the VMAF model.
766 const char *vmaf_model_path;
767 // Indicates the path to the film grain parameters.
768 const char *film_grain_table_filename;
769 // Indicates the visual tuning metric.
770 aom_tune_metric tuning;
771 // Indicates if the current content is screen or default type.
772 aom_tune_content content;
773 // Indicates the film grain parameters.
774 int film_grain_test_vector;
775 // Indicates the in-block distortion metric to use.
776 aom_dist_metric dist_metric;
777} TuneCfg;
778
779typedef struct {
780 // Indicates the framerate of the input video.
781 double init_framerate;
782 // Indicates the bit-depth of the input video.
783 unsigned int input_bit_depth;
784 // Indicates the maximum number of frames to be encoded.
785 unsigned int limit;
786 // Indicates the chrome subsampling x value.
787 unsigned int chroma_subsampling_x;
788 // Indicates the chrome subsampling y value.
789 unsigned int chroma_subsampling_y;
790} InputCfg;
791
792typedef struct {
793 // If true, encoder will use fixed QP offsets, that are either:
794 // - Given by the user, and stored in 'fixed_qp_offsets' array, OR
795 // - Picked automatically from cq_level.
796 int use_fixed_qp_offsets;
797 // Indicates the minimum flatness of the quantization matrix.
798 int qm_minlevel;
799 // Indicates the maximum flatness of the quantization matrix.
800 int qm_maxlevel;
801 // Indicates if adaptive quantize_b should be enabled.
802 int quant_b_adapt;
803 // Indicates the Adaptive Quantization mode to be used.
804 AQ_MODE aq_mode;
805 // Indicates the delta q mode to be used.
806 DELTAQ_MODE deltaq_mode;
807 // Indicates the delta q mode strength.
808 DELTAQ_MODE deltaq_strength;
809 // Indicates if delta quantization should be enabled in chroma planes.
810 bool enable_chroma_deltaq;
811 // Indicates if delta quantization should be enabled for hdr video
812 bool enable_hdr_deltaq;
813 // Indicates if encoding with quantization matrices should be enabled.
814 bool using_qm;
815} QuantizationCfg;
816
899
900
901typedef struct {
902 // Indicates the codec bit-depth.
903 aom_bit_depth_t bit_depth;
904 // Indicates the superblock size that should be used by the encoder.
905 aom_superblock_size_t superblock_size;
906 // Indicates if loopfilter modulation should be enabled.
907 bool enable_deltalf_mode;
908 // Indicates how CDEF should be applied.
909 CDEF_CONTROL cdef_control;
910 // Indicates if loop restoration filter should be enabled.
911 bool enable_restoration;
912 // When enabled, video mode should be used even for single frame input.
913 bool force_video_mode;
914 // Indicates if the error resiliency features should be enabled.
915 bool error_resilient_mode;
916 // Indicates if frame parallel decoding feature should be enabled.
917 bool frame_parallel_decoding_mode;
918 // Indicates if the input should be encoded as monochrome.
919 bool enable_monochrome;
920 // When enabled, the encoder will use a full header even for still pictures.
921 // When disabled, a reduced header is used for still pictures.
922 bool full_still_picture_hdr;
923 // Indicates if dual interpolation filters should be enabled.
924 bool enable_dual_filter;
925 // Indicates if frame order hint should be enabled or not.
926 bool enable_order_hint;
927 // Indicates if ref_frame_mvs should be enabled at the sequence level.
928 bool ref_frame_mvs_present;
929 // Indicates if ref_frame_mvs should be enabled at the frame level.
930 bool enable_ref_frame_mvs;
931 // Indicates if interintra compound mode is enabled.
932 bool enable_interintra_comp;
933 // Indicates if global motion should be enabled.
934 bool enable_global_motion;
935 // Indicates if palette should be enabled.
936 bool enable_palette;
937} ToolCfg;
938
943typedef struct AV1EncoderConfig {
945 // Configuration related to the input video.
946 InputCfg input_cfg;
947
948 // Configuration related to frame-dimensions.
949 FrameDimensionCfg frm_dim_cfg;
950
956
961
967
968 // Configuration related to Quantization.
969 QuantizationCfg q_cfg;
970
971 // Internal frame size scaling.
972 ResizeCfg resize_cfg;
973
974 // Frame Super-Resolution size scaling.
975 SuperResCfg superres_cfg;
976
984
985 // Configuration related to encoder toolsets.
986 ToolCfg tool_cfg;
987
988 // Configuration related to Group of frames.
989 GFConfig gf_cfg;
990
991 // Tile related configuration parameters.
992 TileConfig tile_cfg;
993
994 // Configuration related to Tune.
995 TuneCfg tune_cfg;
996
997 // Configuration related to color.
998 ColorCfg color_cfg;
999
1000 // Configuration related to decoder model.
1001 DecoderModelCfg dec_model_cfg;
1002
1003 // Configuration related to reference frames.
1004 RefFrameCfg ref_frm_cfg;
1005
1006 // Configuration related to unit tests.
1007 UnitTestCfg unit_test_cfg;
1008
1009 // Flags related to motion mode.
1010 MotionModeCfg motion_mode_cfg;
1011
1012 // Flags related to intra mode search.
1013 IntraModeCfg intra_mode_cfg;
1014
1015 // Flags related to transform size/type.
1016 TxfmSizeTypeCfg txfm_cfg;
1017
1018 // Flags related to compound type.
1019 CompoundTypeCfg comp_type_cfg;
1020
1021 // Partition related information.
1022 PartitionCfg part_cfg;
1023
1024 // Configuration related to frequency of cost update.
1025 CostUpdateFreq cost_upd_freq;
1026
1027#if CONFIG_DENOISE
1028 // Indicates the noise level.
1029 float noise_level;
1030 // Indicates the the denoisers block size.
1031 int noise_block_size;
1032 // Indicates whether to apply denoising to the frame to be encoded
1033 int enable_dnl_denoising;
1034#endif
1035
1036#if CONFIG_AV1_TEMPORAL_DENOISING
1037 // Noise sensitivity.
1038 int noise_sensitivity;
1039#endif
1040 // Bit mask to specify which tier each of the 32 possible operating points
1041 // conforms to.
1042 unsigned int tier_mask;
1043
1044 // Indicates the number of pixels off the edge of a reference frame we're
1045 // allowed to go when forming an inter prediction.
1046 int border_in_pixels;
1047
1048 // Indicates the maximum number of threads that may be used by the encoder.
1049 int max_threads;
1050
1051 // Indicates the speed preset to be used.
1052 int speed;
1053
1054 // Enable the low complexity decode mode.
1055 unsigned int enable_low_complexity_decode;
1056
1057 // Indicates the target sequence level index for each operating point(OP).
1058 AV1_LEVEL target_seq_level_idx[MAX_NUM_OPERATING_POINTS];
1059
1060 // Indicates the bitstream profile to be used.
1061 BITSTREAM_PROFILE profile;
1062
1073
1074 // Total number of encoding passes.
1075 int passes;
1076
1077 // the name of the second pass output file when passes > 2
1078 const char *two_pass_output;
1079
1080 // the name of the second pass log file when passes > 2
1081 const char *second_pass_log;
1082
1083 // Indicates if the encoding is GOOD or REALTIME.
1084 MODE mode;
1085
1086 // Indicates if row-based multi-threading should be enabled or not.
1087 bool row_mt;
1088
1089 // Indicates if frame parallel multi-threading should be enabled or not.
1090 bool fp_mt;
1091
1092 // Indicates if 16bit frame buffers are to be used i.e., the content is >
1093 // 8-bit.
1094 bool use_highbitdepth;
1095
1096 // Indicates the bitstream syntax mode. 0 indicates bitstream is saved as
1097 // Section 5 bitstream, while 1 indicates the bitstream is saved in Annex - B
1098 // format.
1099 bool save_as_annexb;
1100
1101 // The path for partition stats reading and writing, used in the experiment
1102 // CONFIG_PARTITION_SEARCH_ORDER.
1103 const char *partition_info_path;
1104
1105 // The flag that indicates whether we use an external rate distribution to
1106 // guide adaptive quantization. It requires --deltaq-mode=3. The rate
1107 // distribution map file name is stored in |rate_distribution_info|.
1108 unsigned int enable_rate_guide_deltaq;
1109
1110 // The input file of rate distribution information used in all intra mode
1111 // to determine delta quantization.
1112 const char *rate_distribution_info;
1113
1114 // Exit the encoder when it fails to encode to a given level.
1115 int strict_level_conformance;
1116
1117 // Max depth for the GOP after a key frame
1118 int kf_max_pyr_height;
1119
1120 // A flag to control if we enable the superblock qp sweep for a given lambda
1121 int sb_qp_sweep;
1124
1126static inline int is_lossless_requested(const RateControlCfg *const rc_cfg) {
1127 return rc_cfg->best_allowed_q == 0 && rc_cfg->worst_allowed_q == 0;
1128}
1130
1134typedef struct {
1140 int obmc_probs[FRAME_UPDATE_TYPES][BLOCK_SIZES_ALL];
1141
1147 int warped_probs[FRAME_UPDATE_TYPES];
1148
1155 int tx_type_probs[FRAME_UPDATE_TYPES][TX_SIZES_ALL][TX_TYPES];
1156
1163 int switchable_interp_probs[FRAME_UPDATE_TYPES][SWITCHABLE_FILTER_CONTEXTS]
1164 [SWITCHABLE_FILTERS];
1166
1168
1169typedef struct FRAME_COUNTS {
1170// Note: This structure should only contain 'unsigned int' fields, or
1171// aggregates built solely from 'unsigned int' fields/elements
1172#if CONFIG_ENTROPY_STATS
1173 unsigned int kf_y_mode[KF_MODE_CONTEXTS][KF_MODE_CONTEXTS][INTRA_MODES];
1174 unsigned int angle_delta[DIRECTIONAL_MODES][2 * MAX_ANGLE_DELTA + 1];
1175 unsigned int y_mode[BLOCK_SIZE_GROUPS][INTRA_MODES];
1176 unsigned int uv_mode[CFL_ALLOWED_TYPES][INTRA_MODES][UV_INTRA_MODES];
1177 unsigned int cfl_sign[CFL_JOINT_SIGNS];
1178 unsigned int cfl_alpha[CFL_ALPHA_CONTEXTS][CFL_ALPHABET_SIZE];
1179 unsigned int palette_y_mode[PALATTE_BSIZE_CTXS][PALETTE_Y_MODE_CONTEXTS][2];
1180 unsigned int palette_uv_mode[PALETTE_UV_MODE_CONTEXTS][2];
1181 unsigned int palette_y_size[PALATTE_BSIZE_CTXS][PALETTE_SIZES];
1182 unsigned int palette_uv_size[PALATTE_BSIZE_CTXS][PALETTE_SIZES];
1183 unsigned int palette_y_color_index[PALETTE_SIZES]
1184 [PALETTE_COLOR_INDEX_CONTEXTS]
1185 [PALETTE_COLORS];
1186 unsigned int palette_uv_color_index[PALETTE_SIZES]
1187 [PALETTE_COLOR_INDEX_CONTEXTS]
1188 [PALETTE_COLORS];
1189 unsigned int partition[PARTITION_CONTEXTS][EXT_PARTITION_TYPES];
1190 unsigned int txb_skip[TOKEN_CDF_Q_CTXS][TX_SIZES][TXB_SKIP_CONTEXTS][2];
1191 unsigned int eob_extra[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1192 [EOB_COEF_CONTEXTS][2];
1193 unsigned int dc_sign[PLANE_TYPES][DC_SIGN_CONTEXTS][2];
1194 unsigned int coeff_lps[TX_SIZES][PLANE_TYPES][BR_CDF_SIZE - 1][LEVEL_CONTEXTS]
1195 [2];
1196 unsigned int eob_flag[TX_SIZES][PLANE_TYPES][EOB_COEF_CONTEXTS][2];
1197 unsigned int eob_multi16[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][5];
1198 unsigned int eob_multi32[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][6];
1199 unsigned int eob_multi64[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][7];
1200 unsigned int eob_multi128[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][8];
1201 unsigned int eob_multi256[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][9];
1202 unsigned int eob_multi512[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][10];
1203 unsigned int eob_multi1024[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][11];
1204 unsigned int coeff_lps_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1205 [LEVEL_CONTEXTS][BR_CDF_SIZE];
1206 unsigned int coeff_base_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1207 [SIG_COEF_CONTEXTS][NUM_BASE_LEVELS + 2];
1208 unsigned int coeff_base_eob_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1209 [SIG_COEF_CONTEXTS_EOB][NUM_BASE_LEVELS + 1];
1210 unsigned int newmv_mode[NEWMV_MODE_CONTEXTS][2];
1211 unsigned int zeromv_mode[GLOBALMV_MODE_CONTEXTS][2];
1212 unsigned int refmv_mode[REFMV_MODE_CONTEXTS][2];
1213 unsigned int drl_mode[DRL_MODE_CONTEXTS][2];
1214 unsigned int inter_compound_mode[INTER_MODE_CONTEXTS][INTER_COMPOUND_MODES];
1215 unsigned int wedge_idx[BLOCK_SIZES_ALL][16];
1216 unsigned int interintra[BLOCK_SIZE_GROUPS][2];
1217 unsigned int interintra_mode[BLOCK_SIZE_GROUPS][INTERINTRA_MODES];
1218 unsigned int wedge_interintra[BLOCK_SIZES_ALL][2];
1219 unsigned int compound_type[BLOCK_SIZES_ALL][MASKED_COMPOUND_TYPES];
1220 unsigned int motion_mode[BLOCK_SIZES_ALL][MOTION_MODES];
1221 unsigned int obmc[BLOCK_SIZES_ALL][2];
1222 unsigned int intra_inter[INTRA_INTER_CONTEXTS][2];
1223 unsigned int comp_inter[COMP_INTER_CONTEXTS][2];
1224 unsigned int comp_ref_type[COMP_REF_TYPE_CONTEXTS][2];
1225 unsigned int uni_comp_ref[UNI_COMP_REF_CONTEXTS][UNIDIR_COMP_REFS - 1][2];
1226 unsigned int single_ref[REF_CONTEXTS][SINGLE_REFS - 1][2];
1227 unsigned int comp_ref[REF_CONTEXTS][FWD_REFS - 1][2];
1228 unsigned int comp_bwdref[REF_CONTEXTS][BWD_REFS - 1][2];
1229 unsigned int intrabc[2];
1230
1231 unsigned int txfm_partition[TXFM_PARTITION_CONTEXTS][2];
1232 unsigned int intra_tx_size[MAX_TX_CATS][TX_SIZE_CONTEXTS][MAX_TX_DEPTH + 1];
1233 unsigned int skip_mode[SKIP_MODE_CONTEXTS][2];
1234 unsigned int skip_txfm[SKIP_CONTEXTS][2];
1235 unsigned int compound_index[COMP_INDEX_CONTEXTS][2];
1236 unsigned int comp_group_idx[COMP_GROUP_IDX_CONTEXTS][2];
1237 unsigned int delta_q[DELTA_Q_PROBS][2];
1238 unsigned int delta_lf_multi[FRAME_LF_COUNT][DELTA_LF_PROBS][2];
1239 unsigned int delta_lf[DELTA_LF_PROBS][2];
1240
1241 unsigned int inter_ext_tx[EXT_TX_SETS_INTER][EXT_TX_SIZES][TX_TYPES];
1242 unsigned int intra_ext_tx[EXT_TX_SETS_INTRA][EXT_TX_SIZES][INTRA_MODES]
1243 [TX_TYPES];
1244 unsigned int filter_intra_mode[FILTER_INTRA_MODES];
1245 unsigned int filter_intra[BLOCK_SIZES_ALL][2];
1246 unsigned int switchable_restore[RESTORE_SWITCHABLE_TYPES];
1247 unsigned int wiener_restore[2];
1248 unsigned int sgrproj_restore[2];
1249#endif // CONFIG_ENTROPY_STATS
1250
1251 unsigned int switchable_interp[SWITCHABLE_FILTER_CONTEXTS]
1252 [SWITCHABLE_FILTERS];
1253} FRAME_COUNTS;
1254
1255#define INTER_MODE_RD_DATA_OVERALL_SIZE 6400
1256
1257typedef struct {
1258 int ready;
1259 double a;
1260 double b;
1261 double dist_mean;
1262 double ld_mean;
1263 double sse_mean;
1264 double sse_sse_mean;
1265 double sse_ld_mean;
1266 int num;
1267 double dist_sum;
1268 double ld_sum;
1269 double sse_sum;
1270 double sse_sse_sum;
1271 double sse_ld_sum;
1272} InterModeRdModel;
1273
1274typedef struct {
1275 int idx;
1276 int64_t rd;
1277} RdIdxPair;
1278// TODO(angiebird): This is an estimated size. We still need to figure what is
1279// the maximum number of modes.
1280#define MAX_INTER_MODES 1024
1281// TODO(any): rename this struct to something else. There is already another
1282// struct called inter_mode_info, which makes this terribly confusing.
1290typedef struct inter_modes_info {
1295 int num;
1299 MB_MODE_INFO mbmi_arr[MAX_INTER_MODES];
1303 int mode_rate_arr[MAX_INTER_MODES];
1307 int64_t sse_arr[MAX_INTER_MODES];
1311 int64_t est_rd_arr[MAX_INTER_MODES];
1315 RdIdxPair rd_idx_pair_arr[MAX_INTER_MODES];
1319 RD_STATS rd_cost_arr[MAX_INTER_MODES];
1323 RD_STATS rd_cost_y_arr[MAX_INTER_MODES];
1327 RD_STATS rd_cost_uv_arr[MAX_INTER_MODES];
1329
1331typedef struct {
1332 // TODO(kyslov): consider changing to 64bit
1333
1334 // This struct is used for computing variance in choose_partitioning(), where
1335 // the max number of samples within a superblock is 32x32 (with 4x4 avg).
1336 // With 8bit bitdepth, uint32_t is enough for sum_square_error (2^8 * 2^8 * 32
1337 // * 32 = 2^26). For high bitdepth we need to consider changing this to 64 bit
1338 uint32_t sum_square_error;
1339 int32_t sum_error;
1340 int log2_count;
1341 int variance;
1342} VPartVar;
1343
1344typedef struct {
1345 VPartVar none;
1346 VPartVar horz[2];
1347 VPartVar vert[2];
1348} VPVariance;
1349
1350typedef struct {
1351 VPVariance part_variances;
1352 VPartVar split[4];
1353} VP4x4;
1354
1355typedef struct {
1356 VPVariance part_variances;
1357 VP4x4 split[4];
1358} VP8x8;
1359
1360typedef struct {
1361 VPVariance part_variances;
1362 VP8x8 split[4];
1363} VP16x16;
1364
1365typedef struct {
1366 VPVariance part_variances;
1367 VP16x16 split[4];
1368} VP32x32;
1369
1370typedef struct {
1371 VPVariance part_variances;
1372 VP32x32 split[4];
1373} VP64x64;
1374
1375typedef struct {
1376 VPVariance part_variances;
1377 VP64x64 *split;
1378} VP128x128;
1379
1381
1385typedef struct {
1394 int64_t thresholds[5];
1395
1402
1406typedef struct {
1407#if CONFIG_MULTITHREAD
1412 pthread_mutex_t *mutex_;
1413 pthread_cond_t *cond_;
1415#endif // CONFIG_MULTITHREAD
1439 int rows;
1449
1451
1452// TODO(jingning) All spatially adaptive variables should go to TileDataEnc.
1453typedef struct TileDataEnc {
1454 TileInfo tile_info;
1455 DECLARE_ALIGNED(16, FRAME_CONTEXT, tctx);
1456 FRAME_CONTEXT *row_ctx;
1457 uint64_t abs_sum_level;
1458 uint8_t allow_update_cdf;
1459 InterModeRdModel inter_mode_rd_models[BLOCK_SIZES_ALL];
1460 AV1EncRowMultiThreadSync row_mt_sync;
1461 MV firstpass_top_mv;
1462} TileDataEnc;
1463
1464typedef struct RD_COUNTS {
1465 int compound_ref_used_flag;
1466 int skip_mode_used_flag;
1467 int tx_type_used[TX_SIZES_ALL][TX_TYPES];
1468 int obmc_used[BLOCK_SIZES_ALL][2];
1469 int warped_used[2];
1470 int newmv_or_intra_blocks;
1471 uint64_t seg_tmp_pred_cost[2];
1472} RD_COUNTS;
1473
1474typedef struct ThreadData {
1475 MACROBLOCK mb;
1476 MvCosts *mv_costs_alloc;
1477 IntraBCMVCosts *dv_costs_alloc;
1478 RD_COUNTS rd_counts;
1479 FRAME_COUNTS *counts;
1480 PC_TREE_SHARED_BUFFERS shared_coeff_buf;
1481 SIMPLE_MOTION_DATA_TREE *sms_tree;
1482 SIMPLE_MOTION_DATA_TREE *sms_root;
1483 uint32_t *hash_value_buffer[2][2];
1484 OBMCBuffer obmc_buffer;
1485 PALETTE_BUFFER *palette_buffer;
1486 CompoundTypeRdBuffers comp_rd_buffer;
1487 CONV_BUF_TYPE *tmp_conv_dst;
1488 uint64_t abs_sum_level;
1489 uint8_t *tmp_pred_bufs[2];
1490 uint8_t *wiener_tmp_pred_buf;
1491 int intrabc_used;
1492 int deltaq_used;
1493 int coefficient_size;
1494 int max_mv_magnitude;
1495 int interp_filter_selected[SWITCHABLE];
1496 FRAME_CONTEXT *tctx;
1497 VP64x64 *vt64x64;
1498 int32_t num_64x64_blocks;
1499 PICK_MODE_CONTEXT *firstpass_ctx;
1500 TemporalFilterData tf_data;
1501 TplBuffers tpl_tmp_buffers;
1502 TplTxfmStats tpl_txfm_stats;
1503 GlobalMotionData gm_data;
1504 // Pointer to the array of structures to store gradient information of each
1505 // pixel in a superblock. The buffer constitutes of MAX_SB_SQUARE pixel level
1506 // structures for each of the plane types (PLANE_TYPE_Y and PLANE_TYPE_UV).
1507 PixelLevelGradientInfo *pixel_gradient_info;
1508 // Pointer to the array of structures to store source variance information of
1509 // each 4x4 sub-block in a superblock. Block4x4VarInfo structure is used to
1510 // store source variance and log of source variance of each 4x4 sub-block
1511 // for subsequent retrieval.
1512 Block4x4VarInfo *src_var_info_of_4x4_sub_blocks;
1513 // Pointer to pc tree root.
1514 PC_TREE *pc_root;
1515} ThreadData;
1516
1517struct EncWorkerData;
1518
1520
1524typedef struct {
1547
1551 int thread_id_to_tile_id[MAX_NUM_THREADS];
1552
1558
1564
1570
1577
1584
1585#if CONFIG_MULTITHREAD
1589 pthread_mutex_t *mutex_;
1593 pthread_cond_t *cond_;
1594#endif
1595
1603 void (*sync_read_ptr)(AV1EncRowMultiThreadSync *const, int, int);
1607 void (*sync_write_ptr)(AV1EncRowMultiThreadSync *const, int, int, int);
1610
1614typedef struct {
1615#if CONFIG_MULTITHREAD
1619 pthread_mutex_t *mutex_;
1623 pthread_cond_t *cond_;
1624#endif
1625
1637 void (*intra_sync_write_ptr)(AV1EncRowMultiThreadSync *const, int, int, int);
1640
1644#define NUM_RECODES_PER_FRAME 10
1645
1649#define MAX_PARALLEL_FRAMES 4
1650
1655typedef struct RestoreStateBuffers {
1659 uint16_t *cdef_srcbuf;
1660
1664 uint16_t *cdef_colbuf[MAX_MB_PLANE];
1665
1669 int32_t *rst_tmpbuf;
1670
1674 RestorationLineBuffers *rlbs;
1676
1697
1703typedef struct {
1708 RestUnitSearchInfo *rusi[MAX_MB_PLANE];
1709
1713 int16_t *dgd_avg;
1715
1724
1728 int num_mod_workers[NUM_MT_MODULES];
1729
1733 AVxWorker *workers;
1734
1739 struct EncWorkerData *tile_thr_data;
1740
1744 AV1CdefWorkerData *cdef_worker;
1745
1751
1756
1762
1766typedef struct MultiThreadInfo {
1771
1775 int num_mod_workers[NUM_MT_MODULES];
1776
1780 AVxWorker *workers;
1781
1786 struct EncWorkerData *tile_thr_data;
1787
1793
1798
1803
1809
1813 AV1TplRowMultiThreadInfo tpl_row_mt;
1814
1818 AV1LfSync lf_row_sync;
1819
1823 AV1LrSync lr_row_sync;
1824
1828 AV1EncPackBSSync pack_bs_sync;
1829
1833 AV1GlobalMotionSync gm_sync;
1834
1838 AV1TemporalFilterSync tf_sync;
1839
1843 AV1CdefSync cdef_sync;
1844
1848 AV1CdefWorkerData *cdef_worker;
1849
1854
1861
1863
1864typedef struct ActiveMap {
1865 int enabled;
1866 int update;
1867 unsigned char *map;
1868} ActiveMap;
1869
1871
1875typedef struct {
1880 double cs_rate_array[32];
1890
1892
1893#if CONFIG_INTERNAL_STATS
1894// types of stats
1895enum {
1896 STAT_Y,
1897 STAT_U,
1898 STAT_V,
1899 STAT_ALL,
1900 NUM_STAT_TYPES // This should always be the last member of the enum
1901} UENUM1BYTE(StatType);
1902
1903typedef struct IMAGE_STAT {
1904 double stat[NUM_STAT_TYPES];
1905 double worst;
1906} ImageStat;
1907#endif // CONFIG_INTERNAL_STATS
1908
1909typedef struct {
1910 int ref_count;
1911 YV12_BUFFER_CONFIG buf;
1912} EncRefCntBuffer;
1913
1915
1936
1938
1939#if CONFIG_COLLECT_PARTITION_STATS
1940typedef struct FramePartitionTimingStats {
1941 int partition_decisions[6][EXT_PARTITION_TYPES];
1942 int partition_attempts[6][EXT_PARTITION_TYPES];
1943 int64_t partition_times[6][EXT_PARTITION_TYPES];
1944
1945 int partition_redo;
1946} FramePartitionTimingStats;
1947#endif // CONFIG_COLLECT_PARTITION_STATS
1948
1949#if CONFIG_COLLECT_COMPONENT_TIMING
1950#include "aom_ports/aom_timer.h"
1951// Adjust the following to add new components.
1952enum {
1953 av1_encode_strategy_time,
1954 av1_get_one_pass_rt_params_time,
1955 av1_get_second_pass_params_time,
1956 denoise_and_encode_time,
1957 apply_filtering_time,
1958 av1_tpl_setup_stats_time,
1959 encode_frame_to_data_rate_time,
1960 encode_with_or_without_recode_time,
1961 loop_filter_time,
1962 cdef_time,
1963 loop_restoration_time,
1964 av1_pack_bitstream_final_time,
1965 av1_encode_frame_time,
1966 av1_compute_global_motion_time,
1967 av1_setup_motion_field_time,
1968 encode_sb_row_time,
1969
1970 rd_pick_partition_time,
1971 rd_use_partition_time,
1972 choose_var_based_partitioning_time,
1973 av1_prune_partitions_time,
1974 none_partition_search_time,
1975 split_partition_search_time,
1976 rectangular_partition_search_time,
1977 ab_partitions_search_time,
1978 rd_pick_4partition_time,
1979 encode_sb_time,
1980
1981 rd_pick_sb_modes_time,
1982 av1_rd_pick_intra_mode_sb_time,
1983 av1_rd_pick_inter_mode_sb_time,
1984 set_params_rd_pick_inter_mode_time,
1985 skip_inter_mode_time,
1986 handle_inter_mode_time,
1987 evaluate_motion_mode_for_winner_candidates_time,
1988 do_tx_search_time,
1989 handle_intra_mode_time,
1990 refine_winner_mode_tx_time,
1991 av1_search_palette_mode_time,
1992 handle_newmv_time,
1993 compound_type_rd_time,
1994 interpolation_filter_search_time,
1995 motion_mode_rd_time,
1996
1997 nonrd_use_partition_time,
1998 pick_sb_modes_nonrd_time,
1999 hybrid_intra_mode_search_time,
2000 nonrd_pick_inter_mode_sb_time,
2001 encode_b_nonrd_time,
2002
2003 kTimingComponents,
2004} UENUM1BYTE(TIMING_COMPONENT);
2005
2006static inline char const *get_component_name(int index) {
2007 switch (index) {
2008 case av1_encode_strategy_time: return "av1_encode_strategy_time";
2009 case av1_get_one_pass_rt_params_time:
2010 return "av1_get_one_pass_rt_params_time";
2011 case av1_get_second_pass_params_time:
2012 return "av1_get_second_pass_params_time";
2013 case denoise_and_encode_time: return "denoise_and_encode_time";
2014 case apply_filtering_time: return "apply_filtering_time";
2015 case av1_tpl_setup_stats_time: return "av1_tpl_setup_stats_time";
2016 case encode_frame_to_data_rate_time:
2017 return "encode_frame_to_data_rate_time";
2018 case encode_with_or_without_recode_time:
2019 return "encode_with_or_without_recode_time";
2020 case loop_filter_time: return "loop_filter_time";
2021 case cdef_time: return "cdef_time";
2022 case loop_restoration_time: return "loop_restoration_time";
2023 case av1_pack_bitstream_final_time: return "av1_pack_bitstream_final_time";
2024 case av1_encode_frame_time: return "av1_encode_frame_time";
2025 case av1_compute_global_motion_time:
2026 return "av1_compute_global_motion_time";
2027 case av1_setup_motion_field_time: return "av1_setup_motion_field_time";
2028 case encode_sb_row_time: return "encode_sb_row_time";
2029
2030 case rd_pick_partition_time: return "rd_pick_partition_time";
2031 case rd_use_partition_time: return "rd_use_partition_time";
2032 case choose_var_based_partitioning_time:
2033 return "choose_var_based_partitioning_time";
2034 case av1_prune_partitions_time: return "av1_prune_partitions_time";
2035 case none_partition_search_time: return "none_partition_search_time";
2036 case split_partition_search_time: return "split_partition_search_time";
2037 case rectangular_partition_search_time:
2038 return "rectangular_partition_search_time";
2039 case ab_partitions_search_time: return "ab_partitions_search_time";
2040 case rd_pick_4partition_time: return "rd_pick_4partition_time";
2041 case encode_sb_time: return "encode_sb_time";
2042
2043 case rd_pick_sb_modes_time: return "rd_pick_sb_modes_time";
2044 case av1_rd_pick_intra_mode_sb_time:
2045 return "av1_rd_pick_intra_mode_sb_time";
2046 case av1_rd_pick_inter_mode_sb_time:
2047 return "av1_rd_pick_inter_mode_sb_time";
2048 case set_params_rd_pick_inter_mode_time:
2049 return "set_params_rd_pick_inter_mode_time";
2050 case skip_inter_mode_time: return "skip_inter_mode_time";
2051 case handle_inter_mode_time: return "handle_inter_mode_time";
2052 case evaluate_motion_mode_for_winner_candidates_time:
2053 return "evaluate_motion_mode_for_winner_candidates_time";
2054 case do_tx_search_time: return "do_tx_search_time";
2055 case handle_intra_mode_time: return "handle_intra_mode_time";
2056 case refine_winner_mode_tx_time: return "refine_winner_mode_tx_time";
2057 case av1_search_palette_mode_time: return "av1_search_palette_mode_time";
2058 case handle_newmv_time: return "handle_newmv_time";
2059 case compound_type_rd_time: return "compound_type_rd_time";
2060 case interpolation_filter_search_time:
2061 return "interpolation_filter_search_time";
2062 case motion_mode_rd_time: return "motion_mode_rd_time";
2063
2064 case nonrd_use_partition_time: return "nonrd_use_partition_time";
2065 case pick_sb_modes_nonrd_time: return "pick_sb_modes_nonrd_time";
2066 case hybrid_intra_mode_search_time: return "hybrid_intra_mode_search_time";
2067 case nonrd_pick_inter_mode_sb_time: return "nonrd_pick_inter_mode_sb_time";
2068 case encode_b_nonrd_time: return "encode_b_nonrd_time";
2069
2070 default: assert(0);
2071 }
2072 return "error";
2073}
2074#endif
2075
2076// The maximum number of internal ARFs except ALTREF_FRAME
2077#define MAX_INTERNAL_ARFS (REF_FRAMES - BWDREF_FRAME - 1)
2078
2080
2084typedef struct {
2089
2095 YV12_BUFFER_CONFIG *ref_buf[REF_FRAMES];
2096
2102 int num_ref_frames[MAX_DIRECTIONS];
2103
2110 FrameDistPair reference_frames[MAX_DIRECTIONS][REF_FRAMES - 1];
2111
2120
2135
2139typedef struct {
2159 fractional_mv_step_fp *find_fractional_mv_step;
2166 search_site_config search_site_cfg[SS_CFG_TOTAL][NUM_DISTINCT_SEARCH_METHODS];
2168
2182
2190typedef struct {
2191 int width;
2194
2198typedef struct {
2202 int ref_relative_dist[INTER_REFS_PER_FRAME];
2212
2228typedef struct {
2236 unsigned int coeff_opt_thresholds[MODE_EVAL_TYPES][2];
2237
2242 TX_SIZE_SEARCH_METHOD tx_size_search_methods[MODE_EVAL_TYPES];
2243
2250 unsigned int use_transform_domain_distortion[MODE_EVAL_TYPES];
2251
2257 unsigned int tx_domain_dist_threshold[MODE_EVAL_TYPES];
2258
2264 unsigned int skip_txfm_level[MODE_EVAL_TYPES];
2265
2271 unsigned int predict_dc_level[MODE_EVAL_TYPES];
2273
2292
2339
2341
2342typedef struct {
2343 // Some misc info
2344 int high_prec;
2345 int q;
2346 int order;
2347
2348 // MV counters
2349 int inter_count;
2350 int intra_count;
2351 int default_mvs;
2352 int mv_joint_count[4];
2353 int last_bit_zero;
2354 int last_bit_nonzero;
2355
2356 // Keep track of the rates
2357 int total_mv_rate;
2358 int hp_total_mv_rate;
2359 int lp_total_mv_rate;
2360
2361 // Texture info
2362 int horz_text;
2363 int vert_text;
2364 int diag_text;
2365
2366 // Whether the current struct contains valid data
2367 int valid;
2368} MV_STATS;
2369
2370typedef struct WeberStats {
2371 int64_t mb_wiener_variance;
2372 int64_t src_variance;
2373 int64_t rec_variance;
2374 int16_t src_pix_max;
2375 int16_t rec_pix_max;
2376 int64_t distortion;
2377 int64_t satd;
2378 double max_scale;
2379} WeberStats;
2380
2381typedef struct {
2382 struct loopfilter lf;
2383 CdefInfo cdef_info;
2384 YV12_BUFFER_CONFIG copy_buffer;
2385 RATE_CONTROL rc;
2386 MV_STATS mv_stats;
2387} CODING_CONTEXT;
2388
2389typedef struct {
2390 int frame_width;
2391 int frame_height;
2392 int mi_rows;
2393 int mi_cols;
2394 int mb_rows;
2395 int mb_cols;
2396 int num_mbs;
2397 aom_bit_depth_t bit_depth;
2398 int subsampling_x;
2399 int subsampling_y;
2400} FRAME_INFO;
2401
2405typedef struct {
2406 int show_frame_count;
2407} FRAME_INDEX_SET;
2408
2410
2414typedef struct {
2420 uint8_t *map;
2428
2432typedef struct {
2445} TimeStamps;
2446
2451typedef struct {
2455 tran_low_t *tcoeff;
2459 uint16_t *eobs;
2463 uint8_t *entropy_ctx;
2465
2466#if !CONFIG_REALTIME_ONLY
2468// DUCKY_ENCODE_FRAME_MODE is c version of EncodeFrameMode
2469enum {
2470 DUCKY_ENCODE_FRAME_MODE_NONE, // Let native AV1 determine q index and rdmult
2471 DUCKY_ENCODE_FRAME_MODE_QINDEX, // DuckyEncode determines q index and AV1
2472 // determines rdmult
2473 DUCKY_ENCODE_FRAME_MODE_QINDEX_RDMULT, // DuckyEncode determines q index and
2474 // rdmult
2475} UENUM1BYTE(DUCKY_ENCODE_FRAME_MODE);
2476
2477enum {
2478 DUCKY_ENCODE_GOP_MODE_NONE, // native AV1 decides GOP
2479 DUCKY_ENCODE_GOP_MODE_RCL, // rate control lib decides GOP
2480} UENUM1BYTE(DUCKY_ENCODE_GOP_MODE);
2481
2482typedef struct DuckyEncodeFrameInfo {
2483 DUCKY_ENCODE_FRAME_MODE qp_mode;
2484 DUCKY_ENCODE_GOP_MODE gop_mode;
2485 int q_index;
2486 int rdmult;
2487 // These two arrays are equivalent to std::vector<SuperblockEncodeParameters>
2488 int *superblock_encode_qindex;
2489 int *superblock_encode_rdmult;
2490 int delta_q_enabled;
2491} DuckyEncodeFrameInfo;
2492
2493typedef struct DuckyEncodeFrameResult {
2494 int global_order_idx;
2495 int q_index;
2496 int rdmult;
2497 int rate;
2498 int64_t dist;
2499 double psnr;
2500} DuckyEncodeFrameResult;
2501
2502typedef struct DuckyEncodeInfo {
2503 DuckyEncodeFrameInfo frame_info;
2504 DuckyEncodeFrameResult frame_result;
2505} DuckyEncodeInfo;
2507#endif
2508
2510typedef struct RTC_REF {
2515 int reference[INTER_REFS_PER_FRAME];
2516 int ref_idx[INTER_REFS_PER_FRAME];
2517 int refresh[REF_FRAMES];
2518 int set_ref_frame_config;
2519 int non_reference_frame;
2520 int ref_frame_comp[3];
2521 int gld_idx_1layer;
2525 unsigned int buffer_time_index[REF_FRAMES];
2529 unsigned char buffer_spatial_layer[REF_FRAMES];
2533 bool reference_was_previous_frame;
2538 bool bias_recovery_frame;
2539} RTC_REF;
2541
2545typedef struct AV1_COMP_DATA {
2549 unsigned char *cx_data;
2550
2555
2560
2564 unsigned int lib_flags;
2565
2570
2575
2580
2584 const aom_rational64_t *timestamp_ratio;
2585
2591
2595typedef struct AV1_PRIMARY {
2600
2606#if CONFIG_FPMT_TEST
2612 FPMT_TEST_ENC_CFG fpmt_unit_test_cfg;
2613
2617 FrameProbInfo temp_frame_probs;
2618
2624 FrameProbInfo temp_frame_probs_simulation;
2625
2630 int temp_valid_gm_model_found[FRAME_UPDATE_TYPES];
2631#endif // CONFIG_FPMT_TEST
2637 RefCntBuffer *ref_frame_map_copy[REF_FRAMES];
2638
2643
2648
2653
2658
2663
2668
2673 struct AV1_COMP *cpi;
2674
2679
2683 struct lookahead_ctx *lookahead;
2684
2695
2700 struct aom_codec_pkt_list *output_pkt_list;
2701
2706
2711
2716
2720 GF_STATE gf_state;
2721
2726
2730 AV1LevelParams level_params;
2731
2736
2741
2746
2751
2760 SequenceHeader seq_params;
2761
2766
2771
2776
2781
2785 struct aom_internal_error_info error;
2786
2792 aom_variance_fn_ptr_t fn_ptr[BLOCK_SIZES_ALL];
2793
2799
2804
2808 MV_STATS mv_stats;
2809
2810#if CONFIG_INTERNAL_STATS
2812 uint64_t total_time_receive_data;
2813 uint64_t total_time_compress_data;
2814
2815 unsigned int total_mode_chosen_counts[MAX_MODES];
2816
2817 int count[2];
2818 uint64_t total_sq_error[2];
2819 uint64_t total_samples[2];
2820 ImageStat psnr[2];
2821
2822 double total_blockiness;
2823 double worst_blockiness;
2824
2825 uint64_t total_bytes;
2826 double summed_quality;
2827 double summed_weights;
2828 double summed_quality_hbd;
2829 double summed_weights_hbd;
2830 unsigned int total_recode_hits;
2831 double worst_ssim;
2832 double worst_ssim_hbd;
2833
2834 ImageStat fastssim;
2835 ImageStat psnrhvs;
2836
2837 int b_calculate_blockiness;
2838 int b_calculate_consistency;
2839
2840 double total_inconsistency;
2841 double worst_consistency;
2842 Ssimv *ssim_vars;
2843 Metrics metrics;
2845#endif
2846
2847#if CONFIG_ENTROPY_STATS
2851 FRAME_COUNTS aggregate_fc;
2852#endif // CONFIG_ENTROPY_STATS
2853
2860 int fb_of_context_type[REF_FRAMES];
2861
2866
2871
2878 int valid_gm_model_found[FRAME_UPDATE_TYPES];
2879
2883 RTC_REF rtc_ref;
2884
2891
2895typedef struct AV1_COMP {
2900
2905 EncQuantDequantParams enc_quant_dequant_params;
2906
2910 ThreadData td;
2911
2915 FRAME_COUNTS counts;
2916
2921
2928
2934
2938 AV1_COMMON common;
2939
2944
2949 TRELLIS_OPT_TYPE optimize_seg_arr[MAX_SEGMENTS];
2950
2956 YV12_BUFFER_CONFIG *source;
2957
2965 YV12_BUFFER_CONFIG *last_source;
2966
2971 YV12_BUFFER_CONFIG *unscaled_source;
2972
2976 YV12_BUFFER_CONFIG scaled_source;
2977
2981 YV12_BUFFER_CONFIG *unscaled_last_source;
2982
2986 YV12_BUFFER_CONFIG scaled_last_source;
2987
2992 YV12_BUFFER_CONFIG *unfiltered_source;
2993
2998 YV12_BUFFER_CONFIG orig_source;
2999
3004
3014
3019
3023 CdefSearchCtx *cdef_search_ctx;
3024
3029
3034 RefCntBuffer *scaled_ref_buf[INTER_REFS_PER_FRAME];
3035
3039 RefCntBuffer *last_show_frame_buf;
3040
3045
3050
3055
3060 YV12_BUFFER_CONFIG last_frame_uf;
3061
3066 YV12_BUFFER_CONFIG trial_frame_rst;
3067
3072
3076 RD_OPT rd;
3077
3082 CODING_CONTEXT coding_context;
3083
3088
3093
3098
3103
3108
3113
3118
3123
3128
3134
3139
3148 ActiveMap active_map;
3149
3153 unsigned char gf_frame_index;
3154
3155#if CONFIG_INTERNAL_STATS
3157 uint64_t time_compress_data;
3158
3159 unsigned int mode_chosen_counts[MAX_MODES];
3160 int bytes;
3161 unsigned int frame_recode_hits;
3163#endif
3164
3165#if CONFIG_SPEED_STATS
3169 unsigned int tx_search_count;
3170#endif // CONFIG_SPEED_STATS
3171
3177
3181 FRAME_INFO frame_info;
3182
3186 FRAME_INDEX_SET frame_index_set;
3187
3194
3201
3209
3215
3221
3227
3232
3237 TileDataEnc *tile_data;
3242
3246 TokenInfo token_info;
3247
3252
3257
3262
3267
3272
3277
3282
3287
3288#if CONFIG_FPMT_TEST
3293 double temp_framerate;
3294#endif
3301
3306
3311
3318
3323
3328
3332 AV1LrStruct lr_ctxt;
3333
3338
3342 aom_film_grain_table_t *film_grain_table;
3343
3344#if CONFIG_DENOISE
3349 struct aom_denoise_and_model_t *denoise_and_model;
3350#endif
3351
3356
3365
3373
3374#if CONFIG_COLLECT_PARTITION_STATS
3378 FramePartitionTimingStats partition_stats;
3379#endif // CONFIG_COLLECT_PARTITION_STATS
3380
3381#if CONFIG_COLLECT_COMPONENT_TIMING
3385 uint64_t component_time[kTimingComponents];
3390 struct aom_usec_timer component_timer[kTimingComponents];
3394 uint64_t frame_component_time[kTimingComponents];
3395#endif
3396
3401
3406
3411
3418
3419#if CONFIG_TUNE_VMAF
3423 TuneVMAFInfo vmaf_info;
3424#endif
3425
3426#if CONFIG_TUNE_BUTTERAUGLI
3430 TuneButteraugliInfo butteraugli_info;
3431#endif
3432
3437
3441 COMPRESSOR_STAGE compressor_stage;
3442
3448
3453
3460
3464 FirstPassData firstpass_data;
3465
3469 NOISE_ESTIMATE noise_estimate;
3470
3471#if CONFIG_AV1_TEMPORAL_DENOISING
3475 AV1_DENOISER denoiser;
3476#endif
3477
3483
3488
3492 BLOCK_SIZE fp_block_size;
3493
3499
3504
3509 ExtPartController ext_part_controller;
3510
3515 MV_STATS mv_stats;
3520
3526
3533#if CONFIG_FPMT_TEST
3539
3540 int wanted_fb;
3541#endif // CONFIG_FPMT_TEST
3542
3549
3550#if CONFIG_RD_COMMAND
3554 RD_COMMAND rd_command;
3555#endif // CONFIG_RD_COMMAND
3556
3560 WeberStats *mb_weber_stats;
3561
3567
3573
3578
3582 BLOCK_SIZE weber_bsize;
3583
3588
3593
3598
3599#if CONFIG_BITRATE_ACCURACY
3603 VBR_RATECTRL_INFO vbr_rc_info;
3604#endif
3605
3606#if CONFIG_RATECTRL_LOG
3610 RATECTRL_LOG rc_log;
3611#endif // CONFIG_RATECTRL_LOG
3612
3617
3618#if CONFIG_THREE_PASS
3622 THIRD_PASS_DEC_CTX *third_pass_ctx;
3623#endif
3624
3629
3634
3640 uint64_t rec_sse;
3641
3647
3648#if !CONFIG_REALTIME_ONLY
3652 DuckyEncodeInfo ducky_encode_info;
3653#endif // CONFIG_REALTIME_ONLY
3654 //
3659
3663 unsigned int zeromv_skip_thresh_exit_part[BLOCK_SIZES_ALL];
3664
3670
3671#if CONFIG_SALIENCY_MAP
3675 uint8_t *saliency_map;
3676
3680 double *sm_scaling_factor;
3681#endif
3682
3688
3694
3700
3704typedef struct EncodeFrameInput {
3706 YV12_BUFFER_CONFIG *source;
3707 YV12_BUFFER_CONFIG *last_source;
3708 int64_t ts_duration;
3711
3716typedef struct EncodeFrameParams {
3724 FRAME_TYPE frame_type;
3725
3727 int primary_ref_frame;
3728 int order_offset;
3729
3735
3737 int refresh_frame_flags;
3738
3739 int show_existing_frame;
3740 int existing_fb_idx_to_show;
3741
3747
3751 int remapped_ref_idx[REF_FRAMES];
3752
3758
3764
3766
3767void av1_initialize_enc(unsigned int usage, enum aom_rc_mode end_usage);
3768
3769struct AV1_COMP *av1_create_compressor(AV1_PRIMARY *ppi,
3770 const AV1EncoderConfig *oxcf,
3771 BufferPool *const pool,
3772 COMPRESSOR_STAGE stage,
3773 int lap_lag_in_frames);
3774
3775struct AV1_PRIMARY *av1_create_primary_compressor(
3776 struct aom_codec_pkt_list *pkt_list_head, int num_lap_buffers,
3777 const AV1EncoderConfig *oxcf);
3778
3779void av1_remove_compressor(AV1_COMP *cpi);
3780
3781void av1_remove_primary_compressor(AV1_PRIMARY *ppi);
3782
3783#if CONFIG_ENTROPY_STATS
3784void print_entropy_stats(AV1_PRIMARY *const ppi);
3785#endif
3786#if CONFIG_INTERNAL_STATS
3787void print_internal_stats(AV1_PRIMARY *ppi);
3788#endif
3789
3790void av1_change_config_seq(AV1_PRIMARY *ppi, const AV1EncoderConfig *oxcf,
3791 bool *sb_size_changed);
3792
3793void av1_change_config(AV1_COMP *cpi, const AV1EncoderConfig *oxcf,
3794 bool sb_size_changed);
3795
3796aom_codec_err_t av1_check_initial_width(AV1_COMP *cpi, int use_highbitdepth,
3797 int subsampling_x, int subsampling_y);
3798
3799void av1_post_encode_updates(AV1_COMP *const cpi,
3800 const AV1_COMP_DATA *const cpi_data);
3801
3802void av1_release_scaled_references_fpmt(AV1_COMP *cpi);
3803
3804void av1_decrement_ref_counts_fpmt(BufferPool *buffer_pool,
3805 int ref_buffers_used_map);
3806
3807void av1_init_sc_decisions(AV1_PRIMARY *const ppi);
3808
3809AV1_COMP *av1_get_parallel_frame_enc_data(AV1_PRIMARY *const ppi,
3810 AV1_COMP_DATA *const first_cpi_data);
3811
3812int av1_init_parallel_frame_context(const AV1_COMP_DATA *const first_cpi_data,
3813 AV1_PRIMARY *const ppi,
3814 int *ref_buffers_used_map);
3815
3817
3835 const YV12_BUFFER_CONFIG *sd, int64_t time_stamp,
3836 int64_t end_time_stamp);
3837
3859int av1_get_compressed_data(AV1_COMP *cpi, AV1_COMP_DATA *const cpi_data);
3860
3867int av1_encode(AV1_COMP *const cpi, uint8_t *const dest, size_t dest_size,
3868 const EncodeFrameInput *const frame_input,
3869 const EncodeFrameParams *const frame_params,
3870 size_t *const frame_size);
3871
3873int av1_get_preview_raw_frame(AV1_COMP *cpi, YV12_BUFFER_CONFIG *dest);
3874
3875int av1_get_last_show_frame(AV1_COMP *cpi, YV12_BUFFER_CONFIG *frame);
3876
3877aom_codec_err_t av1_copy_new_frame_enc(AV1_COMMON *cm,
3878 YV12_BUFFER_CONFIG *new_frame,
3879 YV12_BUFFER_CONFIG *sd);
3880
3881int av1_use_as_reference(int *ext_ref_frame_flags, int ref_frame_flags);
3882
3883int av1_copy_reference_enc(AV1_COMP *cpi, int idx, YV12_BUFFER_CONFIG *sd);
3884
3885int av1_set_reference_enc(AV1_COMP *cpi, int idx, YV12_BUFFER_CONFIG *sd);
3886
3887void av1_set_frame_size(AV1_COMP *cpi, int width, int height);
3888
3889void av1_set_mv_search_params(AV1_COMP *cpi);
3890
3891int av1_set_roi_map(AV1_COMP *cpi, unsigned char *map, unsigned int rows,
3892 unsigned int cols, int delta_q[8], int delta_lf[8],
3893 int skip[8], int ref_frame[8]);
3894
3895int av1_set_active_map(AV1_COMP *cpi, unsigned char *map, int rows, int cols);
3896
3897int av1_get_active_map(AV1_COMP *cpi, unsigned char *map, int rows, int cols);
3898
3899int av1_set_internal_size(AV1EncoderConfig *const oxcf,
3900 ResizePendingParams *resize_pending_params,
3901 AOM_SCALING_MODE horiz_mode,
3902 AOM_SCALING_MODE vert_mode);
3903
3904int av1_get_quantizer(struct AV1_COMP *cpi);
3905
3906// This function assumes that the input buffer contains valid OBUs. It should
3907// not be called on untrusted input.
3908int av1_convert_sect5obus_to_annexb(uint8_t *buffer, size_t buffer_size,
3909 size_t *input_size);
3910
3911void av1_alloc_mb_wiener_var_pred_buf(AV1_COMMON *cm, ThreadData *td);
3912
3913void av1_dealloc_mb_wiener_var_pred_buf(ThreadData *td);
3914
3915uint8_t av1_find_dominant_value(const uint8_t *src, int stride, int rows,
3916 int cols);
3917
3918void av1_dilate_block(const uint8_t *src, int src_stride, uint8_t *dilated,
3919 int dilated_stride, int rows, int cols);
3920
3921// Set screen content options.
3922// This function estimates whether to use screen content tools, by counting
3923// the portion of blocks that have few luma colors.
3924// Modifies:
3925// cpi->commom.features.allow_screen_content_tools
3926// cpi->common.features.allow_intrabc
3927// cpi->use_screen_content_tools
3928// cpi->is_screen_content_type
3929// However, the estimation is not accurate and may misclassify videos.
3930// A slower but more accurate approach that determines whether to use screen
3931// content tools is employed later. See av1_determine_sc_tools_with_encoding().
3932void av1_set_screen_content_options(struct AV1_COMP *cpi,
3933 FeatureFlags *features);
3934
3935void av1_update_frame_size(AV1_COMP *cpi);
3936
3937void av1_set_svc_seq_params(AV1_PRIMARY *const ppi);
3938
3939typedef struct {
3940 int pyr_level;
3941 int disp_order;
3942} RefFrameMapPair;
3943
3944static inline void init_ref_map_pair(
3945 AV1_COMP *cpi, RefFrameMapPair ref_frame_map_pairs[REF_FRAMES]) {
3946 if (cpi->ppi->gf_group.update_type[cpi->gf_frame_index] == KF_UPDATE) {
3947 memset(ref_frame_map_pairs, -1, sizeof(*ref_frame_map_pairs) * REF_FRAMES);
3948 return;
3949 }
3950 memset(ref_frame_map_pairs, 0, sizeof(*ref_frame_map_pairs) * REF_FRAMES);
3951 for (int map_idx = 0; map_idx < REF_FRAMES; map_idx++) {
3952 // Get reference frame buffer.
3953 const RefCntBuffer *const buf = cpi->common.ref_frame_map[map_idx];
3954 if (ref_frame_map_pairs[map_idx].disp_order == -1) continue;
3955 if (buf == NULL) {
3956 ref_frame_map_pairs[map_idx].disp_order = -1;
3957 ref_frame_map_pairs[map_idx].pyr_level = -1;
3958 continue;
3959 } else if (buf->ref_count > 1) {
3960 // Once the keyframe is coded, the slots in ref_frame_map will all
3961 // point to the same frame. In that case, all subsequent pointers
3962 // matching the current are considered "free" slots. This will find
3963 // the next occurrence of the current pointer if ref_count indicates
3964 // there are multiple instances of it and mark it as free.
3965 for (int idx2 = map_idx + 1; idx2 < REF_FRAMES; ++idx2) {
3966 const RefCntBuffer *const buf2 = cpi->common.ref_frame_map[idx2];
3967 if (buf2 == buf) {
3968 ref_frame_map_pairs[idx2].disp_order = -1;
3969 ref_frame_map_pairs[idx2].pyr_level = -1;
3970 }
3971 }
3972 }
3973 ref_frame_map_pairs[map_idx].disp_order = (int)buf->display_order_hint;
3974 ref_frame_map_pairs[map_idx].pyr_level = buf->pyramid_level;
3975 }
3976}
3977
3978#if CONFIG_FPMT_TEST
3979static inline void calc_frame_data_update_flag(
3980 GF_GROUP *const gf_group, int gf_frame_index,
3981 bool *const do_frame_data_update) {
3982 *do_frame_data_update = true;
3983 // Set the flag to false for all frames in a given parallel encode set except
3984 // the last frame in the set with frame_parallel_level = 2.
3985 if (gf_group->frame_parallel_level[gf_frame_index] == 1) {
3986 *do_frame_data_update = false;
3987 } else if (gf_group->frame_parallel_level[gf_frame_index] == 2) {
3988 // Check if this is the last frame in the set with frame_parallel_level = 2.
3989 for (int i = gf_frame_index + 1; i < gf_group->size; i++) {
3990 if ((gf_group->frame_parallel_level[i] == 0 &&
3991 (gf_group->update_type[i] == ARF_UPDATE ||
3992 gf_group->update_type[i] == INTNL_ARF_UPDATE)) ||
3993 gf_group->frame_parallel_level[i] == 1) {
3994 break;
3995 } else if (gf_group->frame_parallel_level[i] == 2) {
3996 *do_frame_data_update = false;
3997 break;
3998 }
3999 }
4000 }
4001}
4002#endif
4003
4004// av1 uses 10,000,000 ticks/second as time stamp
4005#define TICKS_PER_SEC 10000000LL
4006
4007static inline int64_t timebase_units_to_ticks(
4008 const aom_rational64_t *timestamp_ratio, int64_t n) {
4009 return n * timestamp_ratio->num / timestamp_ratio->den;
4010}
4011
4012static inline int64_t ticks_to_timebase_units(
4013 const aom_rational64_t *timestamp_ratio, int64_t n) {
4014 int64_t round = timestamp_ratio->num / 2;
4015 if (round > 0) --round;
4016 return (n * timestamp_ratio->den + round) / timestamp_ratio->num;
4017}
4018
4019static inline int frame_is_kf_gf_arf(const AV1_COMP *cpi) {
4020 const GF_GROUP *const gf_group = &cpi->ppi->gf_group;
4021 const FRAME_UPDATE_TYPE update_type =
4022 gf_group->update_type[cpi->gf_frame_index];
4023
4024 return frame_is_intra_only(&cpi->common) || update_type == ARF_UPDATE ||
4025 update_type == GF_UPDATE;
4026}
4027
4028// TODO(huisu@google.com, youzhou@microsoft.com): enable hash-me for HBD.
4029static inline int av1_use_hash_me(const AV1_COMP *const cpi) {
4032 frame_is_intra_only(&cpi->common));
4033}
4034
4035static inline const YV12_BUFFER_CONFIG *get_ref_frame_yv12_buf(
4036 const AV1_COMMON *const cm, MV_REFERENCE_FRAME ref_frame) {
4037 const RefCntBuffer *const buf = get_ref_frame_buf(cm, ref_frame);
4038 return buf != NULL ? &buf->buf : NULL;
4039}
4040
4041static inline void alloc_frame_mvs(AV1_COMMON *const cm, RefCntBuffer *buf) {
4042 assert(buf != NULL);
4043 ensure_mv_buffer(buf, cm);
4044 buf->width = cm->width;
4045 buf->height = cm->height;
4046}
4047
4048// Get the allocated token size for a tile. It does the same calculation as in
4049// the frame token allocation.
4050static inline unsigned int allocated_tokens(const TileInfo *tile,
4051 int sb_size_log2, int num_planes) {
4052 int tile_mb_rows =
4053 ROUND_POWER_OF_TWO(tile->mi_row_end - tile->mi_row_start, 2);
4054 int tile_mb_cols =
4055 ROUND_POWER_OF_TWO(tile->mi_col_end - tile->mi_col_start, 2);
4056
4057 return get_token_alloc(tile_mb_rows, tile_mb_cols, sb_size_log2, num_planes);
4058}
4059
4060static inline void get_start_tok(AV1_COMP *cpi, int tile_row, int tile_col,
4061 int mi_row, TokenExtra **tok, int sb_size_log2,
4062 int num_planes) {
4063 AV1_COMMON *const cm = &cpi->common;
4064 const int tile_cols = cm->tiles.cols;
4065 TileDataEnc *this_tile = &cpi->tile_data[tile_row * tile_cols + tile_col];
4066 const TileInfo *const tile_info = &this_tile->tile_info;
4067
4068 const int tile_mb_cols =
4069 (tile_info->mi_col_end - tile_info->mi_col_start + 2) >> 2;
4070 const int tile_mb_row = (mi_row - tile_info->mi_row_start + 2) >> 2;
4071
4072 *tok = cpi->token_info.tile_tok[tile_row][tile_col] +
4073 get_token_alloc(tile_mb_row, tile_mb_cols, sb_size_log2, num_planes);
4074}
4075
4076void av1_apply_encoding_flags(AV1_COMP *cpi, aom_enc_frame_flags_t flags);
4077
4078#define ALT_MIN_LAG 3
4079static inline int is_altref_enabled(int lag_in_frames, bool enable_auto_arf) {
4080 return lag_in_frames >= ALT_MIN_LAG && enable_auto_arf;
4081}
4082
4083static inline int can_disable_altref(const GFConfig *gf_cfg) {
4084 return is_altref_enabled(gf_cfg->lag_in_frames, gf_cfg->enable_auto_arf) &&
4085 (gf_cfg->gf_min_pyr_height == 0);
4086}
4087
4088// Helper function to compute number of blocks on either side of the frame.
4089static inline int get_num_blocks(const int frame_length, const int mb_length) {
4090 return (frame_length + mb_length - 1) / mb_length;
4091}
4092
4093// Check if statistics generation stage
4094static inline int is_stat_generation_stage(const AV1_COMP *const cpi) {
4095 assert(IMPLIES(cpi->compressor_stage == LAP_STAGE,
4096 cpi->oxcf.pass == AOM_RC_ONE_PASS && cpi->ppi->lap_enabled));
4097 return (cpi->oxcf.pass == AOM_RC_FIRST_PASS ||
4098 (cpi->compressor_stage == LAP_STAGE));
4099}
4100// Check if statistics consumption stage
4101static inline int is_stat_consumption_stage_twopass(const AV1_COMP *const cpi) {
4102 return (cpi->oxcf.pass >= AOM_RC_SECOND_PASS);
4103}
4104
4105// Check if statistics consumption stage
4106static inline int is_stat_consumption_stage(const AV1_COMP *const cpi) {
4107 return (is_stat_consumption_stage_twopass(cpi) ||
4108 (cpi->oxcf.pass == AOM_RC_ONE_PASS &&
4109 (cpi->compressor_stage == ENCODE_STAGE) && cpi->ppi->lap_enabled));
4110}
4111
4112// Decide whether 'dv_costs' need to be allocated/stored during the encoding.
4113static inline bool av1_need_dv_costs(const AV1_COMP *const cpi) {
4114 return !cpi->sf.rt_sf.use_nonrd_pick_mode &&
4115 av1_allow_intrabc(&cpi->common) && !is_stat_generation_stage(cpi);
4116}
4117
4127static inline int has_no_stats_stage(const AV1_COMP *const cpi) {
4128 assert(
4129 IMPLIES(!cpi->ppi->lap_enabled, cpi->compressor_stage == ENCODE_STAGE));
4130 return (cpi->oxcf.pass == AOM_RC_ONE_PASS && !cpi->ppi->lap_enabled);
4131}
4132
4134
4135static inline int is_one_pass_rt_params(const AV1_COMP *cpi) {
4136 return has_no_stats_stage(cpi) && cpi->oxcf.gf_cfg.lag_in_frames == 0 &&
4137 (cpi->oxcf.mode == REALTIME || cpi->svc.number_spatial_layers > 1);
4138}
4139
4140// Use default/internal reference structure for single-layer RTC.
4141static inline int use_rtc_reference_structure_one_layer(const AV1_COMP *cpi) {
4142 return is_one_pass_rt_params(cpi) && cpi->ppi->number_spatial_layers == 1 &&
4143 cpi->ppi->number_temporal_layers == 1 &&
4144 !cpi->ppi->rtc_ref.set_ref_frame_config;
4145}
4146
4147// Check if postencode drop is allowed.
4148static inline int allow_postencode_drop_rtc(const AV1_COMP *cpi) {
4149 const AV1_COMMON *const cm = &cpi->common;
4150 return is_one_pass_rt_params(cpi) && cpi->oxcf.rc_cfg.mode == AOM_CBR &&
4152 !cpi->rc.rtc_external_ratectrl && !frame_is_intra_only(cm) &&
4153 cpi->svc.spatial_layer_id == 0;
4154}
4155
4156// Function return size of frame stats buffer
4157static inline int get_stats_buf_size(int num_lap_buffer, int num_lag_buffer) {
4158 /* if lookahead is enabled return num_lap_buffers else num_lag_buffers */
4159 return (num_lap_buffer > 0 ? num_lap_buffer + 1 : num_lag_buffer);
4160}
4161
4162// TODO(zoeliu): To set up cpi->oxcf.gf_cfg.enable_auto_brf
4163
4164static inline void set_ref_ptrs(const AV1_COMMON *cm, MACROBLOCKD *xd,
4165 MV_REFERENCE_FRAME ref0,
4166 MV_REFERENCE_FRAME ref1) {
4168 get_ref_scale_factors_const(cm, ref0 >= LAST_FRAME ? ref0 : 1);
4170 get_ref_scale_factors_const(cm, ref1 >= LAST_FRAME ? ref1 : 1);
4171}
4172
4173static inline int get_chessboard_index(int frame_index) {
4174 return frame_index & 0x1;
4175}
4176
4177static inline const int *cond_cost_list_const(const struct AV1_COMP *cpi,
4178 const int *cost_list) {
4179 const int use_cost_list = cpi->sf.mv_sf.subpel_search_method != SUBPEL_TREE &&
4180 cpi->sf.mv_sf.use_fullpel_costlist;
4181 return use_cost_list ? cost_list : NULL;
4182}
4183
4184static inline int *cond_cost_list(const struct AV1_COMP *cpi, int *cost_list) {
4185 const int use_cost_list = cpi->sf.mv_sf.subpel_search_method != SUBPEL_TREE &&
4186 cpi->sf.mv_sf.use_fullpel_costlist;
4187 return use_cost_list ? cost_list : NULL;
4188}
4189
4190// Compression ratio of current frame.
4191double av1_get_compression_ratio(const AV1_COMMON *const cm,
4192 size_t encoded_frame_size);
4193
4194void av1_new_framerate(AV1_COMP *cpi, double framerate);
4195
4196void av1_setup_frame_size(AV1_COMP *cpi);
4197
4198#define LAYER_IDS_TO_IDX(sl, tl, num_tl) ((sl) * (num_tl) + (tl))
4199
4200// Returns 1 if a frame is scaled and 0 otherwise.
4201static inline int av1_resize_scaled(const AV1_COMMON *cm) {
4202 return cm->superres_upscaled_width != cm->render_width ||
4204}
4205
4206static inline int av1_frame_scaled(const AV1_COMMON *cm) {
4207 return av1_superres_scaled(cm) || av1_resize_scaled(cm);
4208}
4209
4210// Don't allow a show_existing_frame to coincide with an error resilient
4211// frame. An exception can be made for a forward keyframe since it has no
4212// previous dependencies.
4213static inline int encode_show_existing_frame(const AV1_COMMON *cm) {
4215 cm->current_frame.frame_type == KEY_FRAME);
4216}
4217
4218// Get index into the 'cpi->mbmi_ext_info.frame_base' array for the given
4219// 'mi_row' and 'mi_col'.
4220static inline int get_mi_ext_idx(const int mi_row, const int mi_col,
4221 const BLOCK_SIZE mi_alloc_bsize,
4222 const int mbmi_ext_stride) {
4223 const int mi_ext_size_1d = mi_size_wide[mi_alloc_bsize];
4224 const int mi_ext_row = mi_row / mi_ext_size_1d;
4225 const int mi_ext_col = mi_col / mi_ext_size_1d;
4226 return mi_ext_row * mbmi_ext_stride + mi_ext_col;
4227}
4228
4229// Lighter version of set_offsets that only sets the mode info
4230// pointers.
4231static inline void set_mode_info_offsets(
4232 const CommonModeInfoParams *const mi_params,
4233 const MBMIExtFrameBufferInfo *const mbmi_ext_info, MACROBLOCK *const x,
4234 MACROBLOCKD *const xd, int mi_row, int mi_col) {
4235 set_mi_offsets(mi_params, xd, mi_row, mi_col);
4236 const int ext_idx = get_mi_ext_idx(mi_row, mi_col, mi_params->mi_alloc_bsize,
4237 mbmi_ext_info->stride);
4238 x->mbmi_ext_frame = mbmi_ext_info->frame_base + ext_idx;
4239}
4240
4241// Check to see if the given partition size is allowed for a specified number
4242// of mi block rows and columns remaining in the image.
4243// If not then return the largest allowed partition size
4244static inline BLOCK_SIZE find_partition_size(BLOCK_SIZE bsize, int rows_left,
4245 int cols_left, int *bh, int *bw) {
4246 int int_size = (int)bsize;
4247 if (rows_left <= 0 || cols_left <= 0) {
4248 return AOMMIN(bsize, BLOCK_8X8);
4249 } else {
4250 for (; int_size > 0; int_size -= 3) {
4251 *bh = mi_size_high[int_size];
4252 *bw = mi_size_wide[int_size];
4253 if ((*bh <= rows_left) && (*bw <= cols_left)) {
4254 break;
4255 }
4256 }
4257 }
4258 return (BLOCK_SIZE)int_size;
4259}
4260
4261static const uint8_t av1_ref_frame_flag_list[REF_FRAMES] = { 0,
4262 AOM_LAST_FLAG,
4263 AOM_LAST2_FLAG,
4264 AOM_LAST3_FLAG,
4265 AOM_GOLD_FLAG,
4266 AOM_BWD_FLAG,
4267 AOM_ALT2_FLAG,
4268 AOM_ALT_FLAG };
4269
4270// When more than 'max_allowed_refs' are available, we reduce the number of
4271// reference frames one at a time based on this order.
4272static const MV_REFERENCE_FRAME disable_order[] = {
4273 LAST3_FRAME,
4274 LAST2_FRAME,
4275 ALTREF2_FRAME,
4276 BWDREF_FRAME,
4277};
4278
4279static const MV_REFERENCE_FRAME
4280 ref_frame_priority_order[INTER_REFS_PER_FRAME] = {
4281 LAST_FRAME, ALTREF_FRAME, BWDREF_FRAME, GOLDEN_FRAME,
4282 ALTREF2_FRAME, LAST2_FRAME, LAST3_FRAME,
4283 };
4284
4285static inline int get_ref_frame_flags(const SPEED_FEATURES *const sf,
4286 const int use_one_pass_rt_params,
4287 const YV12_BUFFER_CONFIG **ref_frames,
4288 const int ext_ref_frame_flags) {
4289 // cpi->ext_flags.ref_frame_flags allows certain reference types to be
4290 // disabled by the external interface. These are set by
4291 // av1_apply_encoding_flags(). Start with what the external interface allows,
4292 // then suppress any reference types which we have found to be duplicates.
4293 int flags = ext_ref_frame_flags;
4294
4295 for (int i = 1; i < INTER_REFS_PER_FRAME; ++i) {
4296 const YV12_BUFFER_CONFIG *const this_ref = ref_frames[i];
4297 // If this_ref has appeared before, mark the corresponding ref frame as
4298 // invalid. For one_pass_rt mode, only disable GOLDEN_FRAME if it's the
4299 // same as LAST_FRAME or ALTREF_FRAME (if ALTREF is being used in nonrd).
4300 int index =
4301 (use_one_pass_rt_params && ref_frame_priority_order[i] == GOLDEN_FRAME)
4302 ? (1 + sf->rt_sf.use_nonrd_altref_frame)
4303 : i;
4304 for (int j = 0; j < index; ++j) {
4305 // If this_ref has appeared before (same as the reference corresponding
4306 // to lower index j), remove it as a reference only if that reference
4307 // (for index j) is actually used as a reference.
4308 if (this_ref == ref_frames[j] &&
4309 (flags & (1 << (ref_frame_priority_order[j] - 1)))) {
4310 flags &= ~(1 << (ref_frame_priority_order[i] - 1));
4311 break;
4312 }
4313 }
4314 }
4315 return flags;
4316}
4317
4318// Returns a Sequence Header OBU stored in an aom_fixed_buf_t, or NULL upon
4319// failure. When a non-NULL aom_fixed_buf_t pointer is returned by this
4320// function, the memory must be freed by the caller. Both the buf member of the
4321// aom_fixed_buf_t, and the aom_fixed_buf_t pointer itself must be freed. Memory
4322// returned must be freed via call to free().
4323//
4324// Note: The OBU returned is in Low Overhead Bitstream Format. Specifically,
4325// the obu_has_size_field bit is set, and the buffer contains the obu_size
4326// field.
4327aom_fixed_buf_t *av1_get_global_headers(AV1_PRIMARY *ppi);
4328
4329#define MAX_GFUBOOST_FACTOR 10.0
4330#define MIN_GFUBOOST_FACTOR 4.0
4331
4332static inline int is_frame_tpl_eligible(const GF_GROUP *const gf_group,
4333 uint8_t index) {
4334 const FRAME_UPDATE_TYPE update_type = gf_group->update_type[index];
4335 return update_type == ARF_UPDATE || update_type == GF_UPDATE ||
4336 update_type == KF_UPDATE;
4337}
4338
4339static inline int is_frame_eligible_for_ref_pruning(const GF_GROUP *gf_group,
4340 int selective_ref_frame,
4341 int prune_ref_frames,
4342 int gf_index) {
4343 return (selective_ref_frame > 0) && (prune_ref_frames > 0) &&
4344 !is_frame_tpl_eligible(gf_group, gf_index);
4345}
4346
4347// Get update type of the current frame.
4348static inline FRAME_UPDATE_TYPE get_frame_update_type(const GF_GROUP *gf_group,
4349 int gf_frame_index) {
4350 return gf_group->update_type[gf_frame_index];
4351}
4352
4353static inline int av1_pixels_to_mi(int pixels) {
4354 return ALIGN_POWER_OF_TWO(pixels, 3) >> MI_SIZE_LOG2;
4355}
4356
4357static inline int is_psnr_calc_enabled(const AV1_COMP *cpi) {
4358 const AV1_COMMON *const cm = &cpi->common;
4359
4360 return cpi->ppi->b_calculate_psnr && !is_stat_generation_stage(cpi) &&
4361 cm->show_frame && !cpi->is_dropped_frame;
4362}
4363
4364static inline int is_frame_resize_pending(const AV1_COMP *const cpi) {
4365 const ResizePendingParams *const resize_pending_params =
4367 return (resize_pending_params->width && resize_pending_params->height &&
4368 (cpi->common.width != resize_pending_params->width ||
4369 cpi->common.height != resize_pending_params->height));
4370}
4371
4372// Check if loop filter is used.
4373static inline int is_loopfilter_used(const AV1_COMMON *const cm) {
4374 return !cm->features.coded_lossless && !cm->tiles.large_scale;
4375}
4376
4377// Check if CDEF is used.
4378static inline int is_cdef_used(const AV1_COMMON *const cm) {
4379 return cm->seq_params->enable_cdef && !cm->features.coded_lossless &&
4380 !cm->tiles.large_scale;
4381}
4382
4383// Check if loop restoration filter is used.
4384static inline int is_restoration_used(const AV1_COMMON *const cm) {
4385 return cm->seq_params->enable_restoration && !cm->features.all_lossless &&
4386 !cm->tiles.large_scale;
4387}
4388
4389// Checks if post-processing filters need to be applied.
4390// NOTE: This function decides if the application of different post-processing
4391// filters on the reconstructed frame can be skipped at the encoder side.
4392// However the computation of different filter parameters that are signaled in
4393// the bitstream is still required.
4394static inline unsigned int derive_skip_apply_postproc_filters(
4395 const AV1_COMP *cpi, int use_loopfilter, int use_cdef, int use_superres,
4396 int use_restoration) {
4397 // Though CDEF parameter selection should be dependent on
4398 // deblocked/loop-filtered pixels for cdef_pick_method <=
4399 // CDEF_FAST_SEARCH_LVL5, CDEF strength values are calculated based on the
4400 // pixel values that are not loop-filtered in svc real-time encoding mode.
4401 // Hence this case is handled separately using the condition below.
4402 if (cpi->ppi->rtc_ref.non_reference_frame)
4403 return (SKIP_APPLY_LOOPFILTER | SKIP_APPLY_CDEF);
4404
4406 return 0;
4407 assert(cpi->oxcf.mode == ALLINTRA);
4408
4409 // The post-processing filters are applied one after the other in the
4410 // following order: deblocking->cdef->superres->restoration. In case of
4411 // ALLINTRA encoding, the reconstructed frame is not used as a reference
4412 // frame. Hence, the application of these filters can be skipped when
4413 // 1. filter parameters of the subsequent stages are not dependent on the
4414 // filtered output of the current stage or
4415 // 2. subsequent filtering stages are disabled
4416 if (use_restoration) return SKIP_APPLY_RESTORATION;
4417 if (use_superres) return SKIP_APPLY_SUPERRES;
4418 if (use_cdef) {
4419 // CDEF parameter selection is not dependent on the deblocked frame if
4420 // cdef_pick_method is CDEF_PICK_FROM_Q. Hence the application of deblocking
4421 // filters and cdef filters can be skipped in this case.
4422 return (cpi->sf.lpf_sf.cdef_pick_method == CDEF_PICK_FROM_Q &&
4423 use_loopfilter)
4424 ? (SKIP_APPLY_LOOPFILTER | SKIP_APPLY_CDEF)
4425 : SKIP_APPLY_CDEF;
4426 }
4427 if (use_loopfilter) return SKIP_APPLY_LOOPFILTER;
4428
4429 // If we reach here, all post-processing stages are disabled, so none need to
4430 // be skipped.
4431 return 0;
4432}
4433
4434static inline void set_postproc_filter_default_params(AV1_COMMON *cm) {
4435 struct loopfilter *const lf = &cm->lf;
4436 CdefInfo *const cdef_info = &cm->cdef_info;
4437 RestorationInfo *const rst_info = cm->rst_info;
4438
4439 lf->filter_level[0] = 0;
4440 lf->filter_level[1] = 0;
4441 lf->backup_filter_level[0] = 0;
4442 lf->backup_filter_level[1] = 0;
4443 cdef_info->cdef_bits = 0;
4444 cdef_info->cdef_strengths[0] = 0;
4445 cdef_info->nb_cdef_strengths = 1;
4446 cdef_info->cdef_uv_strengths[0] = 0;
4450}
4451
4452static inline int is_inter_tx_size_search_level_one(
4453 const TX_SPEED_FEATURES *tx_sf) {
4454 return (tx_sf->inter_tx_size_search_init_depth_rect >= 1 &&
4455 tx_sf->inter_tx_size_search_init_depth_sqr >= 1);
4456}
4457
4458static inline int get_lpf_opt_level(const SPEED_FEATURES *sf) {
4459 int lpf_opt_level = 0;
4460 if (is_inter_tx_size_search_level_one(&sf->tx_sf))
4461 lpf_opt_level = (sf->lpf_sf.lpf_pick == LPF_PICK_FROM_Q) ? 2 : 1;
4462 return lpf_opt_level;
4463}
4464
4465// Enable switchable motion mode only if warp and OBMC tools are allowed
4466static inline bool is_switchable_motion_mode_allowed(bool allow_warped_motion,
4467 bool enable_obmc) {
4468 return (allow_warped_motion || enable_obmc);
4469}
4470
4471#if CONFIG_AV1_TEMPORAL_DENOISING
4472static inline int denoise_svc(const struct AV1_COMP *const cpi) {
4473 return (!cpi->ppi->use_svc ||
4474 (cpi->ppi->use_svc &&
4475 cpi->svc.spatial_layer_id >= cpi->svc.first_layer_denoise));
4476}
4477#endif
4478
4479#if CONFIG_COLLECT_PARTITION_STATS == 2
4480static inline void av1_print_fr_partition_timing_stats(
4481 const FramePartitionTimingStats *part_stats, const char *filename) {
4482 FILE *f = fopen(filename, "w");
4483 if (!f) {
4484 return;
4485 }
4486
4487 fprintf(f, "bsize,redo,");
4488 for (int part = 0; part < EXT_PARTITION_TYPES; part++) {
4489 fprintf(f, "decision_%d,", part);
4490 }
4491 for (int part = 0; part < EXT_PARTITION_TYPES; part++) {
4492 fprintf(f, "attempt_%d,", part);
4493 }
4494 for (int part = 0; part < EXT_PARTITION_TYPES; part++) {
4495 fprintf(f, "time_%d,", part);
4496 }
4497 fprintf(f, "\n");
4498
4499 static const int bsizes[6] = { 128, 64, 32, 16, 8, 4 };
4500
4501 for (int bsize_idx = 0; bsize_idx < 6; bsize_idx++) {
4502 fprintf(f, "%d,%d,", bsizes[bsize_idx], part_stats->partition_redo);
4503 for (int part = 0; part < EXT_PARTITION_TYPES; part++) {
4504 fprintf(f, "%d,", part_stats->partition_decisions[bsize_idx][part]);
4505 }
4506 for (int part = 0; part < EXT_PARTITION_TYPES; part++) {
4507 fprintf(f, "%d,", part_stats->partition_attempts[bsize_idx][part]);
4508 }
4509 for (int part = 0; part < EXT_PARTITION_TYPES; part++) {
4510 fprintf(f, "%ld,", part_stats->partition_times[bsize_idx][part]);
4511 }
4512 fprintf(f, "\n");
4513 }
4514 fclose(f);
4515}
4516#endif // CONFIG_COLLECT_PARTITION_STATS == 2
4517
4518#if CONFIG_COLLECT_PARTITION_STATS
4519static inline int av1_get_bsize_idx_for_part_stats(BLOCK_SIZE bsize) {
4520 assert(bsize == BLOCK_128X128 || bsize == BLOCK_64X64 ||
4521 bsize == BLOCK_32X32 || bsize == BLOCK_16X16 || bsize == BLOCK_8X8 ||
4522 bsize == BLOCK_4X4);
4523 switch (bsize) {
4524 case BLOCK_128X128: return 0;
4525 case BLOCK_64X64: return 1;
4526 case BLOCK_32X32: return 2;
4527 case BLOCK_16X16: return 3;
4528 case BLOCK_8X8: return 4;
4529 case BLOCK_4X4: return 5;
4530 default: assert(0 && "Invalid bsize for partition_stats."); return -1;
4531 }
4532}
4533#endif // CONFIG_COLLECT_PARTITION_STATS
4534
4535#if CONFIG_COLLECT_COMPONENT_TIMING
4536static inline void start_timing(AV1_COMP *cpi, int component) {
4537 aom_usec_timer_start(&cpi->component_timer[component]);
4538}
4539static inline void end_timing(AV1_COMP *cpi, int component) {
4540 aom_usec_timer_mark(&cpi->component_timer[component]);
4541 cpi->frame_component_time[component] +=
4542 aom_usec_timer_elapsed(&cpi->component_timer[component]);
4543}
4544static inline char const *get_frame_type_enum(int type) {
4545 switch (type) {
4546 case 0: return "KEY_FRAME";
4547 case 1: return "INTER_FRAME";
4548 case 2: return "INTRA_ONLY_FRAME";
4549 case 3: return "S_FRAME";
4550 default: assert(0);
4551 }
4552 return "error";
4553}
4554#endif
4555
4557
4558#ifdef __cplusplus
4559} // extern "C"
4560#endif
4561
4562#endif // AOM_AV1_ENCODER_ENCODER_H_
enum aom_chroma_sample_position aom_chroma_sample_position_t
List of chroma sample positions.
enum aom_transfer_characteristics aom_transfer_characteristics_t
List of supported transfer functions.
enum aom_color_range aom_color_range_t
List of supported color range.
enum aom_color_primaries aom_color_primaries_t
List of supported color primaries.
enum aom_matrix_coefficients aom_matrix_coefficients_t
List of supported matrix coefficients.
Provides definitions for using AOM or AV1 encoder algorithm within the aom Codec Interface.
struct macroblock MACROBLOCK
Encoder's parameters related to the current coding block.
COST_UPDATE_TYPE
This enum controls how often the entropy costs should be updated.
Definition encoder.h:222
@ COST_UPD_SBROW
Definition encoder.h:224
@ COST_UPD_TILE
Definition encoder.h:225
@ COST_UPD_OFF
Definition encoder.h:226
@ NUM_COST_UPDATE_TYPES
Definition encoder.h:227
@ COST_UPD_SB
Definition encoder.h:223
LOOPFILTER_CONTROL
This enum controls to which frames loopfilter is applied.
Definition encoder.h:233
@ LOOPFILTER_ALL
Definition encoder.h:235
@ LOOPFILTER_SELECTIVELY
Definition encoder.h:237
@ LOOPFILTER_REFERENCE
Definition encoder.h:236
@ LOOPFILTER_NONE
Definition encoder.h:234
#define NUM_RECODES_PER_FRAME
Max number of recodes used to track the frame probabilities.
Definition encoder.h:1644
struct inter_modes_info InterModesInfo
Struct used to hold inter mode data for fast tx search.
SKIP_APPLY_POSTPROC_FILTER
This enum controls the application of post-processing filters on a reconstructed frame.
Definition encoder.h:245
#define MAX_PARALLEL_FRAMES
Max number of frames that can be encoded in a parallel encode set.
Definition encoder.h:1649
RestorationType
This enumeration defines various restoration types supported.
Definition enums.h:609
@ RESTORE_NONE
Definition enums.h:610
@ RESTORE_SWITCHABLE_TYPES
Definition enums.h:614
@ RESTORE_TYPES
Definition enums.h:615
aom_dist_metric
Distortion metric to use for RD optimization.
Definition aomcx.h:1768
aom_tune_content
AV1 encoder content type.
Definition aomcx.h:1693
enum aom_scaling_mode_1d AOM_SCALING_MODE
aom 1-D scaling mode
aom_tune_metric
Model tuning parameters.
Definition aomcx.h:1735
struct aom_roi_map aom_roi_map_t
aom region of interest map
aom_screen_detection_mode
Screen content detection mode.
Definition aomcx.h:1701
enum aom_bit_depth aom_bit_depth_t
Bit depth for codecThis enumeration determines the bit depth of the codec.
enum aom_superblock_size aom_superblock_size_t
Superblock size selection.
aom_codec_err_t
Algorithm return codes.
Definition aom_codec.h:155
aom_superres_mode
Frame super-resolution mode.
Definition aom_encoder.h:207
aom_rc_mode
Rate control mode.
Definition aom_encoder.h:185
aom_enc_pass
Multi-pass Encoding Pass.
Definition aom_encoder.h:176
struct aom_fixed_buf aom_fixed_buf_t
Generic fixed size buffer structure.
long aom_enc_frame_flags_t
Encoded Frame Flags.
Definition aom_encoder.h:377
@ AOM_CBR
Definition aom_encoder.h:187
@ AOM_RC_ONE_PASS
Definition aom_encoder.h:177
@ AOM_RC_SECOND_PASS
Definition aom_encoder.h:179
@ AOM_RC_FIRST_PASS
Definition aom_encoder.h:178
int av1_get_compressed_data(AV1_COMP *cpi, AV1_COMP_DATA *const cpi_data)
Encode a frame.
Definition encoder.c:5181
int av1_encode(AV1_COMP *const cpi, uint8_t *const dest, size_t dest_size, const EncodeFrameInput *const frame_input, const EncodeFrameParams *const frame_params, size_t *const frame_size)
Run 1-pass/2-pass encoding.
Definition encoder.c:4473
int av1_receive_raw_frame(AV1_COMP *cpi, aom_enc_frame_flags_t frame_flags, const YV12_BUFFER_CONFIG *sd, int64_t time_stamp, int64_t end_time_stamp)
Obtain the raw frame data.
Definition encoder.c:4571
static int has_no_stats_stage(const AV1_COMP *const cpi)
Check if the current stage has statistics.
Definition encoder.h:4127
Describes look ahead buffer operations.
@ CDEF_PICK_FROM_Q
Definition speed_features.h:172
RestorationInfo rst_info[3]
Definition av1_common_int.h:960
int superres_upscaled_width
Definition av1_common_int.h:813
int superres_upscaled_height
Definition av1_common_int.h:814
SequenceHeader * seq_params
Definition av1_common_int.h:990
int width
Definition av1_common_int.h:789
CdefInfo cdef_info
Definition av1_common_int.h:969
CurrentFrame current_frame
Definition av1_common_int.h:768
int show_existing_frame
Definition av1_common_int.h:914
struct loopfilter lf
Definition av1_common_int.h:953
FeatureFlags features
Definition av1_common_int.h:919
int show_frame
Definition av1_common_int.h:899
RefCntBuffer * ref_frame_map[REF_FRAMES]
Definition av1_common_int.h:892
CommonTileParams tiles
Definition av1_common_int.h:1006
int height
Definition av1_common_int.h:790
int render_width
Definition av1_common_int.h:800
int render_height
Definition av1_common_int.h:801
Encoder data related to multi-threading for allintra deltaq-mode=3.
Definition encoder.h:1614
pthread_mutex_t * mutex_
Definition encoder.h:1619
void(* intra_sync_read_ptr)(AV1EncRowMultiThreadSync *const, int, int)
Definition encoder.h:1633
pthread_cond_t * cond_
Definition encoder.h:1623
void(* intra_sync_write_ptr)(AV1EncRowMultiThreadSync *const, int, int, int)
Definition encoder.h:1637
Encoder data related to row-based multi-threading.
Definition encoder.h:1524
int allocated_sb_rows
Definition encoder.h:1563
pthread_mutex_t * mutex_
Definition encoder.h:1589
int allocated_tile_cols
Definition encoder.h:1532
bool firstpass_mt_exit
Definition encoder.h:1576
int allocated_cols
Definition encoder.h:1546
int thread_id_to_tile_id[64]
Definition encoder.h:1551
bool mb_wiener_mt_exit
Definition encoder.h:1583
void(* sync_write_ptr)(AV1EncRowMultiThreadSync *const, int, int, int)
Definition encoder.h:1607
pthread_cond_t * cond_
Definition encoder.h:1593
bool row_mt_exit
Definition encoder.h:1569
int allocated_tile_rows
Definition encoder.h:1528
int allocated_rows
Definition encoder.h:1539
int * num_tile_cols_done
Definition encoder.h:1557
void(* sync_read_ptr)(AV1EncRowMultiThreadSync *const, int, int)
Definition encoder.h:1603
Encoder parameters for synchronization of row based multi-threading.
Definition encoder.h:1406
int rows
Definition encoder.h:1439
int sync_range
Definition encoder.h:1428
int intrabc_extra_top_right_sb_delay
Definition encoder.h:1435
int next_mi_row
Definition encoder.h:1443
int * num_finished_cols
Definition encoder.h:1421
pthread_mutex_t * mutex_
Definition encoder.h:1412
pthread_cond_t * cond_
Definition encoder.h:1413
int num_threads_working
Definition encoder.h:1447
Main encoder configuration data structure.
Definition encoder.h:943
RateControlCfg rc_cfg
Definition encoder.h:965
KeyFrameCfg kf_cfg
Definition encoder.h:960
enum aom_enc_pass pass
Definition encoder.h:1071
AlgoCfg algo_cfg
Definition encoder.h:955
aom_fixed_buf_t twopass_stats_in
Definition encoder.h:982
Structure to hold search parameter per restoration unit and intermediate buffer of Wiener filter used...
Definition encoder.h:1703
RestUnitSearchInfo * rusi[3]
Definition encoder.h:1708
int16_t * dgd_avg
Definition encoder.h:1713
Structure to hold data corresponding to an encoded frame.
Definition encoder.h:2545
int64_t ts_frame_end
Definition encoder.h:2574
int pop_lookahead
Definition encoder.h:2589
int64_t ts_frame_start
Definition encoder.h:2569
unsigned char * cx_data
Definition encoder.h:2549
size_t cx_data_sz
Definition encoder.h:2554
int flush
Definition encoder.h:2579
unsigned int lib_flags
Definition encoder.h:2564
size_t frame_size
Definition encoder.h:2559
const aom_rational64_t * timestamp_ratio
Definition encoder.h:2584
Top level encoder structure.
Definition encoder.h:2895
double * ext_rate_distribution
Definition encoder.h:3572
int do_update_frame_probs_warp[10]
Definition encoder.h:3281
uint8_t * consec_zero_mv
Definition encoder.h:3482
int do_update_frame_probs_obmc[10]
Definition encoder.h:3276
struct aom_denoise_and_model_t * denoise_and_model
Definition encoder.h:3349
int skip_tpl_setup_stats
Definition encoder.h:3003
int frames_since_last_update
Definition encoder.h:3658
int * mb_delta_q
Definition encoder.h:3592
int vaq_refresh
Definition encoder.h:3251
FRAME_TYPE last_frame_type
Definition encoder.h:3447
YV12_BUFFER_CONFIG * unscaled_source
Definition encoder.h:2971
int palette_pixel_num
Definition encoder.h:3687
CYCLIC_REFRESH * cyclic_refresh
Definition encoder.h:3143
RATE_CONTROL rc
Definition encoder.h:3102
int deltaq_used
Definition encoder.h:3405
ActiveMap active_map
Definition encoder.h:3148
bool frame_size_related_setup_done
Definition encoder.h:3214
WeberStats * mb_weber_stats
Definition encoder.h:3560
bool refresh_idx_available
Definition encoder.h:3525
TokenInfo token_info
Definition encoder.h:3246
int64_t ambient_err
Definition encoder.h:3071
aom_film_grain_table_t * film_grain_table
Definition encoder.h:3342
int ref_refresh_index
Definition encoder.h:3519
size_t available_bs_size
Definition encoder.h:3503
SPEED_FEATURES sf
Definition encoder.h:3122
TRELLIS_OPT_TYPE optimize_seg_arr[8]
Definition encoder.h:2949
ExtPartController ext_part_controller
Definition encoder.h:3509
FILE * second_pass_log_stream
Definition encoder.h:3628
double * ssim_rdmult_scaling_factors
Definition encoder.h:3417
RD_OPT rd
Definition encoder.h:3076
int data_alloc_height
Definition encoder.h:3200
int num_tg
Definition encoder.h:3452
WinnerModeParams winner_mode_params
Definition encoder.h:3092
ExternalFlags ext_flags
Definition encoder.h:3054
bool alloc_pyramid
Definition encoder.h:3669
EncSegmentationInfo enc_seg
Definition encoder.h:3138
MotionVectorSearchParams mv_search_params
Definition encoder.h:3127
int use_screen_content_tools
Definition encoder.h:3364
int do_update_frame_probs_interpfilter[10]
Definition encoder.h:3286
CODING_CONTEXT coding_context
Definition encoder.h:3082
TemporalFilterCtx tf_ctx
Definition encoder.h:3018
ForceIntegerMVInfo force_intpel_info
Definition encoder.h:3028
GlobalMotionInfo gm_info
Definition encoder.h:3087
int consec_zero_mv_alloc_size
Definition encoder.h:3487
CoeffBufferPool coeff_buffer_pool
Definition encoder.h:2933
FRAME_INDEX_SET frame_index_set
Definition encoder.h:3186
int ref_frame_flags
Definition encoder.h:3112
RefCntBuffer * scaled_ref_buf[INTER_REFS_PER_FRAME]
Definition encoder.h:3034
unsigned char gf_frame_index
Definition encoder.h:3153
AV1EncoderConfig oxcf
Definition encoder.h:2943
AV1_COMMON common
Definition encoder.h:2938
AV1LrStruct lr_ctxt
Definition encoder.h:3332
bool do_frame_data_update
Definition encoder.h:3548
CdefSearchCtx * cdef_search_ctx
Definition encoder.h:3023
int data_alloc_width
Definition encoder.h:3193
int do_update_frame_probs_txtype[10]
Definition encoder.h:3271
FRAME_COUNTS counts
Definition encoder.h:2915
COMPRESSOR_STAGE compressor_stage
Definition encoder.h:3441
int intrabc_used
Definition encoder.h:3322
int num_frame_recode
Definition encoder.h:3261
int rt_reduce_num_ref_buffers
Definition encoder.h:3049
RefreshFrameInfo refresh_frame
Definition encoder.h:3044
int prune_ref_frame_mask
Definition encoder.h:3327
YV12_BUFFER_CONFIG * unscaled_last_source
Definition encoder.h:2981
int all_one_sided_refs
Definition encoder.h:3133
MultiThreadInfo mt_info
Definition encoder.h:3310
VarBasedPartitionInfo vbp_info
Definition encoder.h:3256
int scaled_last_source_available
Definition encoder.h:3693
YV12_BUFFER_CONFIG * last_source
Definition encoder.h:2965
int existing_fb_idx_to_show
Definition encoder.h:3317
YV12_BUFFER_CONFIG * unfiltered_source
Definition encoder.h:2992
unsigned int zeromv_skip_thresh_exit_part[BLOCK_SIZES_ALL]
Definition encoder.h:3663
FRAME_INFO frame_info
Definition encoder.h:3181
int last_coded_height
Definition encoder.h:3226
int frame_header_count
Definition encoder.h:3400
int droppable
Definition encoder.h:3176
RefCntBuffer * last_show_frame_buf
Definition encoder.h:3039
aom_superres_mode superres_mode
Definition encoder.h:3459
MBMIExtFrameBufferInfo mbmi_ext_info
Definition encoder.h:2920
AV1LrPickStruct pick_lr_ctxt
Definition encoder.h:3337
double new_framerate
Definition encoder.h:3300
AV1_PRIMARY * ppi
Definition encoder.h:2899
uint64_t * src_sad_blk_64x64
Definition encoder.h:3633
int64_t norm_wiener_variance
Definition encoder.h:3587
double * tpl_rdmult_scaling_factors
Definition encoder.h:3013
int sb_counter
Definition encoder.h:3498
int last_coded_width
Definition encoder.h:3220
TileDataEnc * tile_data
Definition encoder.h:3237
int is_screen_content_type
Definition encoder.h:3372
BLOCK_SIZE weber_bsize
Definition encoder.h:3582
InterpSearchFlags interp_search_flags
Definition encoder.h:3355
TimeStamps time_stamps
Definition encoder.h:3097
aom_roi_map_t roi
Definition encoder.h:3698
int ref_idx_to_skip
Definition encoder.h:3532
YV12_BUFFER_CONFIG orig_source
Definition encoder.h:2998
FirstPassData firstpass_data
Definition encoder.h:3464
double framerate
Definition encoder.h:3107
int speed
Definition encoder.h:3117
BLOCK_SIZE fp_block_size
Definition encoder.h:3492
int use_ducky_encode
Definition encoder.h:3646
YV12_BUFFER_CONFIG trial_frame_rst
Definition encoder.h:3066
bool is_dropped_frame
Definition encoder.h:3597
ThreadData td
Definition encoder.h:2910
ResizePendingParams resize_pending_params
Definition encoder.h:3231
YV12_BUFFER_CONFIG scaled_source
Definition encoder.h:2976
int do_update_vbr_bits_off_target_fast
Definition encoder.h:3305
YV12_BUFFER_CONFIG last_frame_uf
Definition encoder.h:3060
EncQuantDequantParams enc_quant_dequant_params
Definition encoder.h:2905
RefFrameDistanceInfo ref_frame_dist_info
Definition encoder.h:3410
int * prep_rate_estimates
Definition encoder.h:3566
DuckyEncodeInfo ducky_encode_info
Definition encoder.h:3652
double ext_rate_scale
Definition encoder.h:3577
int initial_mbs
Definition encoder.h:3208
uint64_t rec_sse
Definition encoder.h:3640
YV12_BUFFER_CONFIG scaled_last_source
Definition encoder.h:2986
MV_STATS mv_stats
Definition encoder.h:3515
FrameProbInfo frame_new_probs[10]
Definition encoder.h:3266
YV12_BUFFER_CONFIG * source
Definition encoder.h:2956
int allocated_tiles
Definition encoder.h:3241
SVC svc
Definition encoder.h:3436
CB_COEFF_BUFFER * coeff_buffer_base
Definition encoder.h:2927
NOISE_ESTIMATE noise_estimate
Definition encoder.h:3469
TWO_PASS_FRAME twopass_frame
Definition encoder.h:3616
Top level primary encoder structure.
Definition encoder.h:2595
int num_fp_contexts
Definition encoder.h:2652
AV1EncRowMultiThreadSync intra_row_mt_sync
Definition encoder.h:2889
bool buffer_removal_time_present
Definition encoder.h:2770
int valid_gm_model_found[FRAME_UPDATE_TYPES]
Definition encoder.h:2878
struct aom_codec_pkt_list * output_pkt_list
Definition encoder.h:2700
int filter_level[2]
Definition encoder.h:2657
SequenceHeader seq_params
Definition encoder.h:2760
MV_STATS mv_stats
Definition encoder.h:2808
struct AV1_COMP * cpi
Definition encoder.h:2673
AV1LevelParams level_params
Definition encoder.h:2730
int internal_altref_allowed
Definition encoder.h:2705
RTC_REF rtc_ref
Definition encoder.h:2883
int b_calculate_psnr
Definition encoder.h:2735
PrimaryMultiThreadInfo p_mt_info
Definition encoder.h:2865
TEMPORAL_FILTER_INFO tf_info
Definition encoder.h:2755
TWO_PASS twopass
Definition encoder.h:2745
int frames_left
Definition encoder.h:2740
int64_t ts_start_last_show_frame
Definition encoder.h:2642
PRIMARY_RATE_CONTROL p_rc
Definition encoder.h:2750
int lap_enabled
Definition encoder.h:2725
FrameProbInfo frame_probs
Definition encoder.h:2870
int show_existing_alt_ref
Definition encoder.h:2710
int fb_of_context_type[REF_FRAMES]
Definition encoder.h:2860
int use_svc
Definition encoder.h:2765
double * tpl_sb_rdmult_scaling_factors
Definition encoder.h:2798
int filter_level_v
Definition encoder.h:2667
int filter_level_u
Definition encoder.h:2662
struct AV1_COMP * cpi_lap
Definition encoder.h:2678
struct AV1_COMP * parallel_cpi[4]
Definition encoder.h:2599
int64_t ts_end_last_show_frame
Definition encoder.h:2647
struct lookahead_ctx * lookahead
Definition encoder.h:2683
RefCntBuffer * ref_frame_map_copy[REF_FRAMES]
Definition encoder.h:2637
GF_STATE gf_state
Definition encoder.h:2720
aom_variance_fn_ptr_t fn_ptr[BLOCK_SIZES_ALL]
Definition encoder.h:2792
GF_GROUP gf_group
Definition encoder.h:2715
struct AV1_COMP_DATA parallel_frames_data[4 - 1]
Definition encoder.h:2605
TplParams tpl_data
Definition encoder.h:2803
unsigned int number_temporal_layers
Definition encoder.h:2775
unsigned int number_spatial_layers
Definition encoder.h:2780
int seq_params_locked
Definition encoder.h:2694
struct aom_internal_error_info error
Definition encoder.h:2785
Algorithm configuration parameters.
Definition encoder.h:821
int disable_trellis_quant
Definition encoder.h:848
int sharpness
Definition encoder.h:834
bool skip_postproc_filtering
Definition encoder.h:892
bool enable_adaptive_sharpness
Definition encoder.h:839
int arnr_max_frames
Definition encoder.h:853
aom_screen_detection_mode screen_detection_mode
Definition encoder.h:897
bool enable_tpl_model
Definition encoder.h:871
LOOPFILTER_CONTROL loopfilter_control
Definition encoder.h:886
uint8_t cdf_update_mode
Definition encoder.h:866
bool enable_overlay
Definition encoder.h:877
int arnr_strength
Definition encoder.h:858
Stores the transforms coefficients for the whole superblock.
Definition block.h:206
The stucture of CYCLIC_REFRESH.
Definition aq_cyclicrefresh.h:36
Parameters related to CDEF.
Definition av1_common_int.h:202
int cdef_bits
Number of CDEF strength values in bits.
Definition av1_common_int.h:224
int cdef_uv_strengths[16]
CDEF strength values for chroma.
Definition av1_common_int.h:222
int cdef_strengths[16]
CDEF strength values for luma.
Definition av1_common_int.h:220
int nb_cdef_strengths
Number of CDEF strength values.
Definition av1_common_int.h:218
Definition encoder.h:2451
uint8_t * entropy_ctx
Definition encoder.h:2463
tran_low_t * tcoeff
Definition encoder.h:2455
uint16_t * eobs
Definition encoder.h:2459
Params related to MB_MODE_INFO arrays and related info.
Definition av1_common_int.h:510
BLOCK_SIZE mi_alloc_bsize
Definition av1_common_int.h:559
int cols
Definition av1_common_int.h:437
unsigned int large_scale
Definition av1_common_int.h:497
Encoder flags for compound prediction modes.
Definition encoder.h:400
bool enable_masked_comp
Definition encoder.h:409
bool enable_diff_wtd_comp
Definition encoder.h:417
bool enable_smooth_interintra
Definition encoder.h:413
bool enable_interintra_wedge
Definition encoder.h:425
bool enable_interinter_wedge
Definition encoder.h:421
bool enable_dist_wtd_comp
Definition encoder.h:404
Segmentation related information for the current frame.
Definition encoder.h:2414
uint8_t * map
Definition encoder.h:2420
bool has_lossless_segment
Definition encoder.h:2426
Input frames and last input frame.
Definition encoder.h:3704
contains per-frame encoding parameters decided upon by av1_encode_strategy() and passed down to av1_e...
Definition encoder.h:3716
int error_resilient_mode
Definition encoder.h:3720
int remapped_ref_idx[REF_FRAMES]
Definition encoder.h:3751
int ref_frame_flags
Definition encoder.h:3746
int speed
Definition encoder.h:3762
FRAME_TYPE frame_type
Definition encoder.h:3724
int show_frame
Definition encoder.h:3734
RefreshFrameInfo refresh_frame
Definition encoder.h:3757
Frame refresh flags set by the external interface.
Definition encoder.h:2281
bool golden_frame
Definition encoder.h:2283
bool bwd_ref_frame
Definition encoder.h:2284
bool update_pending
Definition encoder.h:2290
bool last_frame
Definition encoder.h:2282
bool alt_ref_frame
Definition encoder.h:2286
bool alt2_ref_frame
Definition encoder.h:2285
Flags signalled by the external interface at frame level.
Definition encoder.h:2296
bool use_primary_ref_none
Definition encoder.h:2337
bool use_ref_frame_mvs
Definition encoder.h:2321
ExtRefreshFrameFlagsInfo refresh_frame
Definition encoder.h:2305
int ref_frame_flags
Definition encoder.h:2300
bool use_error_resilient
Definition encoder.h:2326
bool use_s_frame
Definition encoder.h:2331
bool refresh_frame_context
Definition encoder.h:2310
bool refresh_frame_context_pending
Definition encoder.h:2316
Frame level features.
Definition av1_common_int.h:367
bool allow_screen_content_tools
Definition av1_common_int.h:384
bool allow_intrabc
Definition av1_common_int.h:385
bool coded_lossless
Definition av1_common_int.h:394
bool error_resilient_mode
Definition av1_common_int.h:409
bool all_lossless
Definition av1_common_int.h:398
Encoder info used for decision on forcing integer motion vectors.
Definition encoder.h:1875
double cs_rate_array[32]
Definition encoder.h:1880
int rate_size
Definition encoder.h:1888
int rate_index
Definition encoder.h:1884
Encoder-side probabilities for pruning of various AV1 tools.
Definition encoder.h:1134
int switchable_interp_probs[FRAME_UPDATE_TYPES][((SWITCHABLE_FILTERS+1) *4)][SWITCHABLE_FILTERS]
Definition encoder.h:1164
int obmc_probs[FRAME_UPDATE_TYPES][BLOCK_SIZES_ALL]
Definition encoder.h:1140
int warped_probs[FRAME_UPDATE_TYPES]
Definition encoder.h:1147
int tx_type_probs[FRAME_UPDATE_TYPES][TX_SIZES_ALL][TX_TYPES]
Definition encoder.h:1155
Data related to the current GF/ARF group and the individual frames within the group.
Definition firstpass.h:339
Parameters related to global motion search.
Definition encoder.h:2084
FrameDistPair reference_frames[2][REF_FRAMES - 1]
Definition encoder.h:2110
bool search_done
Definition encoder.h:2088
int segment_map_h
Definition encoder.h:2117
int num_ref_frames[2]
Definition encoder.h:2102
YV12_BUFFER_CONFIG * ref_buf[REF_FRAMES]
Definition encoder.h:2095
int segment_map_w
Definition encoder.h:2116
Flags related to interpolation filter search.
Definition encoder.h:2124
int default_interp_skip_flags
Definition encoder.h:2129
uint16_t interp_filter_search_mask
Definition encoder.h:2133
Encoder flags for intra prediction.
Definition encoder.h:303
bool enable_diagonal_intra
Definition encoder.h:333
bool enable_smooth_intra
Definition encoder.h:316
bool auto_intra_tools_off
Definition encoder.h:352
bool enable_filter_intra
Definition encoder.h:312
bool enable_directional_intra
Definition encoder.h:328
bool enable_paeth_intra
Definition encoder.h:320
bool enable_intra_edge_filter
Definition encoder.h:307
bool enable_cfl_intra
Definition encoder.h:324
bool enable_angle_delta
Definition encoder.h:338
Encoder config related to the coding of key frames.
Definition encoder.h:467
int key_freq_max
Definition encoder.h:476
int sframe_mode
Definition encoder.h:494
bool auto_key
Definition encoder.h:499
bool enable_intrabc
Definition encoder.h:519
int sframe_dist
Definition encoder.h:487
bool enable_sframe
Definition encoder.h:514
int enable_keyframe_filtering
Definition encoder.h:481
int fwd_kf_dist
Definition encoder.h:504
int key_freq_min
Definition encoder.h:471
bool fwd_kf_enabled
Definition encoder.h:509
Buffer to store mode information at mi_alloc_bsize (4x4 or 8x8) level.
Definition encoder.h:1921
int alloc_size
Definition encoder.h:1930
int stride
Definition encoder.h:1934
MB_MODE_INFO_EXT_FRAME * frame_base
Definition encoder.h:1926
Stores best extended mode information at frame level.
Definition block.h:242
Stores the prediction/txfm mode of the current coding block.
Definition blockd.h:222
Parameters for motion vector search process.
Definition encoder.h:2139
int max_mv_magnitude
Definition encoder.h:2145
fractional_mv_step_fp * find_fractional_mv_step
Definition encoder.h:2159
int mv_step_param
Definition encoder.h:2150
search_site_config search_site_cfg[SS_CFG_TOTAL][NUM_DISTINCT_SEARCH_METHODS]
Definition encoder.h:2166
Encoder parameters related to multi-threading.
Definition encoder.h:1766
RestoreStateBuffers restore_state_buf
Definition encoder.h:1853
AV1CdefWorkerData * cdef_worker
Definition encoder.h:1848
AV1LrSync lr_row_sync
Definition encoder.h:1823
struct EncWorkerData * tile_thr_data
Definition encoder.h:1786
AV1TplRowMultiThreadInfo tpl_row_mt
Definition encoder.h:1813
AV1EncPackBSSync pack_bs_sync
Definition encoder.h:1828
AV1EncRowMultiThreadInfo enc_row_mt
Definition encoder.h:1802
AV1LfSync lf_row_sync
Definition encoder.h:1818
AV1CdefSync cdef_sync
Definition encoder.h:1843
int num_mod_workers[NUM_MT_MODULES]
Definition encoder.h:1775
AV1EncAllIntraMultiThreadInfo intra_mt
Definition encoder.h:1808
int num_workers
Definition encoder.h:1770
int pipeline_lpf_mt_with_enc
Definition encoder.h:1859
AVxWorker * workers
Definition encoder.h:1780
bool pack_bs_mt_enabled
Definition encoder.h:1797
bool row_mt_enabled
Definition encoder.h:1792
AV1TemporalFilterSync tf_sync
Definition encoder.h:1838
AV1GlobalMotionSync gm_sync
Definition encoder.h:1833
Primary Rate Control parameters and status.
Definition ratectrl.h:302
Encoder config for coding block partitioning.
Definition encoder.h:275
bool enable_rect_partitions
Definition encoder.h:279
bool enable_1to4_partitions
Definition encoder.h:287
BLOCK_SIZE max_partition_size
Definition encoder.h:297
bool enable_ab_partitions
Definition encoder.h:283
BLOCK_SIZE min_partition_size
Definition encoder.h:292
Primary Encoder parameters related to multi-threading.
Definition encoder.h:1719
struct EncWorkerData * tile_thr_data
Definition encoder.h:1739
AV1CdefWorkerData * cdef_worker
Definition encoder.h:1744
int num_workers
Definition encoder.h:1723
int prev_num_enc_workers
Definition encoder.h:1760
AVxWorker * workers
Definition encoder.h:1733
AVxWorker * p_workers[4]
Definition encoder.h:1750
int p_num_workers
Definition encoder.h:1755
int num_mod_workers[NUM_MT_MODULES]
Definition encoder.h:1728
Rate Control parameters and status.
Definition ratectrl.h:134
Encoder rate control configuration parameters.
Definition encoder.h:525
int worst_allowed_q
Definition encoder.h:595
int over_shoot_pct
Definition encoder.h:590
unsigned int max_intra_bitrate_pct
Definition encoder.h:560
int drop_frames_water_mark
Definition encoder.h:578
int max_consec_drop_ms
Definition encoder.h:633
int vbrmax_section
Definition encoder.h:626
int64_t maximum_buffer_size_ms
Definition encoder.h:544
unsigned int vbr_corpus_complexity_lap
Definition encoder.h:555
unsigned int min_cr
Definition encoder.h:574
int vbrbias
Definition encoder.h:616
unsigned int gf_cbr_boost_pct
Definition encoder.h:569
int vbrmin_section
Definition encoder.h:621
enum aom_rc_mode mode
Definition encoder.h:609
unsigned int max_inter_bitrate_pct
Definition encoder.h:565
int64_t starting_buffer_level_ms
Definition encoder.h:534
int best_allowed_q
Definition encoder.h:600
int under_shoot_pct
Definition encoder.h:584
int64_t target_bandwidth
Definition encoder.h:549
int64_t optimal_buffer_level_ms
Definition encoder.h:539
int cq_level
Definition encoder.h:604
Refrence frame distance related variables.
Definition encoder.h:2198
int8_t nearest_past_ref
Definition encoder.h:2206
int ref_relative_dist[INTER_REFS_PER_FRAME]
Definition encoder.h:2202
int8_t nearest_future_ref
Definition encoder.h:2210
Refresh frame flags for different type of frames.
Definition encoder.h:2177
bool bwd_ref_frame
Definition encoder.h:2179
bool golden_frame
Definition encoder.h:2178
bool alt_ref_frame
Definition encoder.h:2180
Encoder config related to resize.
Definition encoder.h:255
uint8_t resize_scale_denominator
Definition encoder.h:264
uint8_t resize_kf_scale_denominator
Definition encoder.h:269
RESIZE_MODE resize_mode
Definition encoder.h:259
Desired dimensions for an externally triggered resize.
Definition encoder.h:2190
int width
Definition encoder.h:2191
int height
Definition encoder.h:2192
Parameters related to restoration types.
Definition encoder.h:1680
RestorationType best_rtype[RESTORE_TYPES - 1]
Definition encoder.h:1695
WienerInfo wiener
Definition encoder.h:1684
SgrprojInfo sgrproj
Definition encoder.h:1689
Parameters related to Restoration Info.
Definition restoration.h:246
RestorationType frame_restoration_type
Definition restoration.h:250
Buffers to be backed up during parallel encode set to be restored later.
Definition encoder.h:1655
int32_t * rst_tmpbuf
Definition encoder.h:1669
RestorationLineBuffers * rlbs
Definition encoder.h:1674
uint16_t * cdef_colbuf[3]
Definition encoder.h:1664
uint16_t * cdef_srcbuf
Definition encoder.h:1659
Top level speed vs quality trade off data struture.
Definition speed_features.h:2009
MV_SPEED_FEATURES mv_sf
Definition speed_features.h:2038
LOOP_FILTER_SPEED_FEATURES lpf_sf
Definition speed_features.h:2073
TX_SPEED_FEATURES tx_sf
Definition speed_features.h:2058
REAL_TIME_SPEED_FEATURES rt_sf
Definition speed_features.h:2078
The stucture of SVC.
Definition svc_layercontext.h:89
Parameters related to Sgrproj Filter.
Definition blockd.h:507
Encoder config related to frame super-resolution.
Definition encoder.h:431
uint8_t superres_kf_scale_denominator
Definition encoder.h:453
aom_superres_mode superres_mode
Definition encoder.h:457
int superres_kf_qthresh
Definition encoder.h:441
bool enable_superres
Definition encoder.h:461
uint8_t superres_scale_denominator
Definition encoder.h:447
int superres_qthresh
Definition encoder.h:436
Temporal filter info for a gop.
Definition temporal_filter.h:161
Frame level Two pass status and control data.
Definition firstpass.h:460
Two pass status and control data.
Definition firstpass.h:418
Parameters related to temporal filtering.
Definition temporal_filter.h:98
Frame time stamps.
Definition encoder.h:2432
int64_t prev_ts_start
Definition encoder.h:2436
int64_t first_ts_start
Definition encoder.h:2444
int64_t prev_ts_end
Definition encoder.h:2440
Params related to temporal dependency model.
Definition tpl_model.h:165
Encoder flags for transform sizes and types.
Definition encoder.h:358
bool enable_tx64
Definition encoder.h:362
bool use_inter_dct_only
Definition encoder.h:385
bool enable_flip_idtx
Definition encoder.h:366
bool use_intra_default_tx_only
Definition encoder.h:390
bool use_intra_dct_only
Definition encoder.h:380
bool enable_rect_tx
Definition encoder.h:370
bool reduced_tx_type_set
Definition encoder.h:375
bool enable_tx_size_search
Definition encoder.h:394
Thresholds for variance based partitioning.
Definition encoder.h:1385
int64_t thresholds[5]
Definition encoder.h:1394
int64_t threshold_minmax
Definition encoder.h:1400
Parameters related to Wiener Filter.
Definition blockd.h:494
Parameters used for winner mode processing.
Definition encoder.h:2228
unsigned int use_transform_domain_distortion[MODE_EVAL_TYPES]
Definition encoder.h:2250
TX_SIZE_SEARCH_METHOD tx_size_search_methods[MODE_EVAL_TYPES]
Definition encoder.h:2242
unsigned int skip_txfm_level[MODE_EVAL_TYPES]
Definition encoder.h:2264
unsigned int coeff_opt_thresholds[MODE_EVAL_TYPES][2]
Definition encoder.h:2236
unsigned int tx_domain_dist_threshold[MODE_EVAL_TYPES]
Definition encoder.h:2257
unsigned int predict_dc_level[MODE_EVAL_TYPES]
Definition encoder.h:2271
Struct used to hold inter mode data for fast tx search.
Definition encoder.h:1290
RD_STATS rd_cost_arr[MAX_INTER_MODES]
Definition encoder.h:1319
int64_t est_rd_arr[MAX_INTER_MODES]
Definition encoder.h:1311
int64_t sse_arr[MAX_INTER_MODES]
Definition encoder.h:1307
RD_STATS rd_cost_y_arr[MAX_INTER_MODES]
Definition encoder.h:1323
RD_STATS rd_cost_uv_arr[MAX_INTER_MODES]
Definition encoder.h:1327
MB_MODE_INFO mbmi_arr[MAX_INTER_MODES]
Definition encoder.h:1299
RdIdxPair rd_idx_pair_arr[MAX_INTER_MODES]
Definition encoder.h:1315
int mode_rate_arr[MAX_INTER_MODES]
Definition encoder.h:1303
int num
Definition encoder.h:1295
MB_MODE_INFO_EXT_FRAME * mbmi_ext_frame
Finalized mbmi_ext for the whole frame.
Definition block.h:910
const struct scale_factors * block_ref_scale_factors[2]
Definition blockd.h:687